diff options
author | SHiNE CsyFeK <csyfek@gmail.com> | 2009-04-23 15:20:23 +0000 |
---|---|---|
committer | SHiNE CsyFeK <csyfek@gmail.com> | 2009-04-23 15:20:23 +0000 |
commit | 06fc27d37e70617c4b73a8ddc9569ebfb6c466c6 (patch) | |
tree | 810e9b20defe272b013acc7bb190fafeb476661a | |
parent | 20411dd391c8ade61953215f76406edb0246813f (diff) | |
download | pidgin-06fc27d37e70617c4b73a8ddc9569ebfb6c466c6.tar.gz |
2009.04.23 - flos <lonicerae(at)gmail.com>
* Fixed a bug of updating buddy who is not in user's buddy list
-rw-r--r-- | libpurple/protocols/qq/ChangeLog | 3 | ||||
-rw-r--r-- | libpurple/protocols/qq/buddy_info.c | 15 |
2 files changed, 12 insertions, 6 deletions
diff --git a/libpurple/protocols/qq/ChangeLog b/libpurple/protocols/qq/ChangeLog index 241f449dc6..cb6d7a1877 100644 --- a/libpurple/protocols/qq/ChangeLog +++ b/libpurple/protocols/qq/ChangeLog @@ -1,3 +1,6 @@ +2009.04.23 - flos <lonicerae(at)gmail.com> + * Fixed a bug of updating buddy who is not in user's buddy list + 2009.02.25 - flos <lonicerae(at)gmail.com> * Changed text 'ZipCode' to 'Postal Code' diff --git a/libpurple/protocols/qq/buddy_info.c b/libpurple/protocols/qq/buddy_info.c index f84fce81d0..033c7e58d6 100644 --- a/libpurple/protocols/qq/buddy_info.c +++ b/libpurple/protocols/qq/buddy_info.c @@ -606,21 +606,21 @@ void qq_update_buddy_icon(PurpleAccount *account, const gchar *who, gint face) /* after getting info or modify myself, refresh the buddy list accordingly */ static void update_buddy_info(PurpleConnection *gc, gchar **segments) { - PurpleBuddy *buddy; - qq_data *qd; - qq_buddy_data *bd; + PurpleBuddy *buddy = NULL; + qq_data *qd = NULL; + qq_buddy_data *bd = NULL; guint32 uid; gchar *who; gchar *alias_utf8; - PurpleAccount *account = purple_connection_get_account(gc); + PurpleAccount *account = purple_connection_get_account(gc); qd = (qq_data *)purple_connection_get_protocol_data(gc); uid = strtoul(segments[QQ_INFO_UID], NULL, 10); who = uid_to_purple_name(uid); - qq_filter_str(segments[QQ_INFO_NICK]); alias_utf8 = qq_to_utf8(segments[QQ_INFO_NICK], QQ_CHARSET_DEFAULT); + if (uid == qd->uid) { /* it is me */ purple_debug_info("QQ", "Got my info\n"); qd->my_icon = strtol(segments[QQ_INFO_FACE], NULL, 10); @@ -631,12 +631,14 @@ static void update_buddy_info(PurpleConnection *gc, gchar **segments) buddy = qq_buddy_find_or_new(gc, uid); } else { buddy = purple_find_buddy(gc->account, who); + /* purple_debug_info("QQ", "buddy=%p\n", (void*)buddy); */ } /* if the buddy is null, the api will catch it and return null here */ bd = purple_buddy_get_protocol_data(buddy); + /* purple_debug_info("QQ", "bd=%p\n", (void*)bd); */ - if (buddy == NULL || bd) { + if (bd == NULL || buddy == NULL) { g_free(who); g_free(alias_utf8); return; @@ -646,6 +648,7 @@ static void update_buddy_info(PurpleConnection *gc, gchar **segments) bd->age = strtol(segments[QQ_INFO_AGE], NULL, 10); bd->gender = strtol(segments[QQ_INFO_GENDER], NULL, 10); bd->face = strtol(segments[QQ_INFO_FACE], NULL, 10); + if (alias_utf8 != NULL) { if (bd->nickname) g_free(bd->nickname); bd->nickname = g_strdup(alias_utf8); |