summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSHiNE CsyFeK <csyfek@gmail.com>2009-04-23 15:20:23 +0000
committerSHiNE CsyFeK <csyfek@gmail.com>2009-04-23 15:20:23 +0000
commit06fc27d37e70617c4b73a8ddc9569ebfb6c466c6 (patch)
tree810e9b20defe272b013acc7bb190fafeb476661a
parent20411dd391c8ade61953215f76406edb0246813f (diff)
downloadpidgin-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/ChangeLog3
-rw-r--r--libpurple/protocols/qq/buddy_info.c15
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);