# HG changeset patch # User Sean Egan # Date 1187971118 0 # Node ID fbdabdd3839aa2b4a42adf439e37f868c5b5f1c7 # Parent e95555316216346ef5fbbb22ff2456c39311b869# Parent ff23b2470850c56c95d9ec1bb33ee18755e16200 merge of '0705e301236da4eef643bf63cac73af309c26799' and '195aef2568dd6ceacd046d089326f3f87a0e761a' diff -r e95555316216 -r fbdabdd3839a libpurple/blist.c --- a/libpurple/blist.c Fri Aug 24 15:04:19 2007 +0000 +++ b/libpurple/blist.c Fri Aug 24 15:58:38 2007 +0000 @@ -1190,6 +1190,9 @@ group = purple_group_new(_("Chats")); purple_blist_add_group(group, purple_blist_get_last_sibling(purplebuddylist->root)); + } else { + /* Fail if tried to add buddy to a group that isn't on the blist. #2752. */ + g_return_if_fail(purple_find_group(group->name)); } } else { group = (PurpleGroup*)node->parent; @@ -1284,6 +1287,10 @@ g = (PurpleGroup *)((PurpleBlistNode *)c)->parent; } else { if (group) { + /* Fail if trying to add buddy to a group that is not on the buddy list. + * Fix for #2752. */ + g_return_if_fail(purple_find_group(group->name)); + g = group; } else { g = purple_group_new(_("Buddies")); diff -r e95555316216 -r fbdabdd3839a libpurple/protocols/myspace/CHANGES --- a/libpurple/protocols/myspace/CHANGES Fri Aug 24 15:04:19 2007 +0000 +++ b/libpurple/protocols/myspace/CHANGES Fri Aug 24 15:58:38 2007 +0000 @@ -1,3 +1,28 @@ +2007-08-23 Jeff Connelly - 0.16 +* Add option to add all friends from myspace.com to your buddy list (#2660) +* If a user doesn't have a picture, don't display an icon (instead of + displaying MySpace's "no photo" icon) +* Fix #2725, a common crash related to buddy icon data +* Fix #2752, which led to duplicate groups +* Fix #2720, crash/disconnect when adding a buddy that doesn't exist + (You'll now receive an error when looking up invalid usernames). + +2007-08-22 Jeff Connelly - 0.15 +* Incomplete implementation of adding friends from myspace.com. +* Change msim_msg_get() to start at the given node instead of the beginning. +* Add msim_msg_get_*_from_element() to access data in MsimMessagElement *'s. +* Use MsimMessage dictionaries everywhere in incoming messages, instead of + the old GHashTable method. Dictionary type is now fully implemented. +* Add functions to loop over MsimMessages. +* Link to myspace.com profile in Get Info. +* Conditionally use my proposed attention API if defined. +* Propagate to im.pidgin.pidgin branch for 2.1.2. +* GSoC ended on 2007-08-20. The code in this release hasn't changed since + then. I did, however, bump the version number to 0.15 to distinguish this + release from the previous one. But there were no code changes. I updated + the text files, too. +* Note: msimprpl will continue to be developed as time permits. + 2007-08-12 Jeff Connelly - 0.14 * Full emoticon support (except no difference between nerd and geek emoticons), thanks to a number of new icons from Hylke Bons. diff -r e95555316216 -r fbdabdd3839a libpurple/protocols/myspace/README --- a/libpurple/protocols/myspace/README Fri Aug 24 15:04:19 2007 +0000 +++ b/libpurple/protocols/myspace/README Fri Aug 24 15:58:38 2007 +0000 @@ -1,4 +1,4 @@ -MySpaceIM Protocol Plugin by Jeff Connelly 20070807 +MySpaceIM Protocol Plugin for Libpurple by Jeff Connelly 20070807 Greetings. This package contains a plugin for libpurple (as used in @@ -6,7 +6,7 @@ network and send/receive messages. Functionality is only basic as of yet, and this code should be considered alpha quality. -This code is being developed under Google Summer of Code 2007. +This code was initially developed under Google Summer of Code 2007. For features and TODO, see http://developer.pidgin.im/wiki/MySpaceIM @@ -28,7 +28,5 @@ Enjoy, -Jeff Connelly -California Polytechnic State University at San Luis Obispo -myspaceim@xyzzy.cjb.net -jeff2@soc.pidgin.im +msimprpl@xyzzy.cjb.net diff -r e95555316216 -r fbdabdd3839a libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Fri Aug 24 15:04:19 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Fri Aug 24 15:58:38 2007 +0000 @@ -1669,8 +1669,8 @@ * by Alexandr Shutko, who maintains OSCAR protocol documentation). */ purple_debug_info("msim", "Unrecognized data on account for %s\n", - session->account->username ? session->account->username - : "(NULL)"); + (session && session->account && session->account->username) ? + session->account->username : "(NULL)"); if (note) { purple_debug_info("msim", "(Note: %s)\n", note); } @@ -1784,7 +1784,7 @@ return rc; } -/* Process an incoming media (buddy icon) message. */ +/* Process an incoming media (message background?) message. */ static gboolean msim_incoming_media(MsimSession *session, MsimMessage *msg) { @@ -2656,11 +2656,18 @@ purple_debug_info("msim_downloaded_buddy_icon", "Downloaded %d bytes\n", len); + if (!url_text) { + purple_debug_info("msim_downloaded_buddy_icon", + "failed to download icon for %s", + user->buddy->name); + return; + } + purple_buddy_icons_set_for_user(user->buddy->account, user->buddy->name, - (gchar *)url_text, len, - /* Use URL itself as buddy icon "checksum" */ - user->image_url); + g_memdup((gchar *)url_text, len), len, + /* Use URL itself as buddy icon "checksum" (TODO: ETag) */ + user->image_url); /* checksum */ } /** Store a field of information about a buddy. */ @@ -2696,6 +2703,15 @@ const gchar *previous_url; user->image_url = g_strdup(value_str); + + /* Instead of showing 'no photo' picture, show nothing. */ + if (!strcmp(user->image_url, "http://x.myspace.com/images/no_pic.gif")) + { + purple_buddy_icons_set_for_user(user->buddy->account, + user->buddy->name, + NULL, 0, NULL); + return; + } previous_url = purple_buddy_icons_get_checksum_for_user(user->buddy); @@ -2703,6 +2719,9 @@ if (!previous_url || strcmp(previous_url, user->image_url)) { purple_util_fetch_url(user->image_url, TRUE, NULL, TRUE, msim_downloaded_buddy_icon, (gpointer)user); } + } else if (!strcmp(key_str, "LastImageUpdated")) { + /* TODO: use somewhere */ + user->last_image_updated = atol(value_str); } else if (!strcmp(key_str, "Headline")) { user->headline = g_strdup(value_str); } else { @@ -3207,7 +3226,7 @@ msim_postprocess_outgoing_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) { - gchar *uid_field_name, *uid_before; + gchar *uid_field_name, *uid_before, *username; guint uid; MsimMessage *msg, *body; @@ -3222,6 +3241,19 @@ uid = msim_msg_get_integer(body, "UserID"); msim_msg_free(body); + username = msim_msg_get_string(msg, "_username"); + + if (!uid) { + gchar *msg; + + msg = g_strdup_printf(_("No such user: %s"), username); + purple_notify_error(NULL, NULL, _("User lookup"), msg); + g_free(msg); + g_free(username); + //msim_msg_free(msg); + return; + } + uid_field_name = msim_msg_get_string(msg, "_uid_field_name"); uid_before = msim_msg_get_string(msg, "_uid_before"); @@ -3238,6 +3270,7 @@ */ g_free(uid_field_name); g_free(uid_before); + g_free(username); //msim_msg_free(msg); } @@ -3908,6 +3941,8 @@ group_name = msim_msg_get_string(contact_info, "GroupName"); if (group_name) { group = purple_group_new(group_name); + purple_debug_info("msim_add_contact_from_server_cb", + "adding to GroupName: %s\n", group_name); g_free(group_name); } else { group = purple_group_new(_("IM Friends")); @@ -3916,13 +3951,17 @@ /* 2. Get or create buddy */ buddy = purple_find_buddy(session->account, username); if (!buddy) { + purple_debug_info("msim_add_contact_from_server_cb", + "creating new buddy: %s\n", username); buddy = purple_buddy_new(session->account, username, NULL); } + /* Add group to beginning. See #2752. */ + purple_blist_add_group(group, NULL); + /* TODO: use 'Position' in contact_info to take into account where buddy is */ purple_blist_add_buddy(buddy, NULL, group, NULL /* insertion point */); - /* 3. Update buddy information */ user = msim_get_user_from_buddy(buddy); @@ -3943,14 +3982,14 @@ * * @return TRUE if added. * */ -static void +static gboolean msim_add_contact_from_server(MsimSession *session, MsimMessage *contact_info) { guint uid; const gchar *username; uid = msim_msg_get_integer(contact_info, "ContactID"); - g_return_if_fail(uid != 0); + g_return_val_if_fail(uid != 0, FALSE); /* Lookup the username, since NickName and IMName is unreliable */ username = msim_uid2username_from_blist(session, uid); @@ -3965,6 +4004,10 @@ } else { msim_add_contact_from_server_cb(session, NULL, (gpointer)msim_msg_clone(contact_info)); } + + /* Say that the contact was added, even if we're still looking up + * their username. */ + return TRUE; } /** Called when contact list is received from server. */ @@ -3972,12 +4015,16 @@ msim_got_contact_list(MsimSession *session, MsimMessage *reply, gpointer user_data) { MsimMessage *body, *body_node; + gchar *msg; + guint buddy_count; msim_msg_dump("msim_got_contact_list: reply=%s", reply); body = msim_msg_get_dictionary(reply, "body"); g_return_if_fail(body != NULL); + buddy_count = 0; + for (body_node = body; body_node != NULL; body_node = msim_msg_get_next_element_node(body_node)) @@ -3989,10 +4036,18 @@ if (!strcmp(elem->name, "ContactID")) { /* Will look for first contact in body_node */ - msim_add_contact_from_server(session, body_node); + if (msim_add_contact_from_server(session, body_node)) { + ++buddy_count; + } } } + msg = g_strdup_printf(_("%d buddies were added or updated"), buddy_count); + + purple_notify_info(session->account, _("Add contacts from server"), msg, NULL); + + g_free(msg); + msim_msg_free(body); } diff -r e95555316216 -r fbdabdd3839a libpurple/protocols/myspace/myspace.h --- a/libpurple/protocols/myspace/myspace.h Fri Aug 24 15:04:19 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.h Fri Aug 24 15:58:38 2007 +0000 @@ -90,7 +90,7 @@ #define MSIM_LANGUAGE_NAME_ENGLISH "ENGLISH" /* msimprpl version string of this plugin */ -#define MSIM_PRPL_VERSION_STRING "0.14" +#define MSIM_PRPL_VERSION_STRING "0.16" /* Default server */ #define MSIM_SERVER "im.myspace.akadns.net" @@ -226,6 +226,7 @@ gchar *username; gchar *band_name, *song_name; gchar *image_url; + guint last_image_updated; } MsimUser; diff -r e95555316216 -r fbdabdd3839a libpurple/protocols/myspace/release.sh --- a/libpurple/protocols/myspace/release.sh Fri Aug 24 15:04:19 2007 +0000 +++ b/libpurple/protocols/myspace/release.sh Fri Aug 24 15:58:38 2007 +0000 @@ -4,7 +4,7 @@ # Package a new msimprpl for release. Must be run with bash. -VERSION=0.14 +VERSION=0.16 make # Include 'myspace' directory in archive, so it can easily be unextracted # into ~/pidgin/libpurple/protocols at the correct location.