# HG changeset patch # User Mark Doliner # Date 1229054499 0 # Node ID 128a77f3b3c4697cb1c90983af45b964cdbb18a0 # Parent 1af3baa61c9f4e32b1d228adee9f023a3cf2ae9a Keep track of the user ID in the MsimUser struct so that we have a copy even for people who aren't in our buddy list. This fixes the "View web profile" link when getting info for people not in our buddy list. diff -r 1af3baa61c9f -r 128a77f3b3c4 libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Fri Dec 12 03:46:36 2008 +0000 +++ b/libpurple/protocols/myspace/myspace.c Fri Dec 12 04:01:39 2008 +0000 @@ -1018,7 +1018,6 @@ { MsimSession *session; MsimUser *user; - guint uid; gchar *user_to_lookup; MsimMessage *user_msg; @@ -1033,8 +1032,8 @@ user = msim_find_user(session, username); /* If is on buddy list, lookup by uid since it is faster. */ - if (user && (uid = purple_blist_node_get_int(&user->buddy->node, "UserID"))) { - user_to_lookup = g_strdup_printf("%d", uid); + if (user && user->id) { + user_to_lookup = g_strdup_printf("%d", user->id); } else { /* Looking up buddy not on blist. Lookup by whatever user entered. */ user_to_lookup = g_strdup(username); @@ -1970,10 +1969,11 @@ purple_blist_add_buddy(buddy, NULL, NULL, NULL); user = msim_get_user_from_buddy(buddy); - - /* All buddies on list should have a UserID integer associated with them. */ - purple_blist_node_set_int(&buddy->node, "UserID", msim_msg_get_integer(msg, "f")); - + user->id = msim_msg_get_integer(msg, "f"); + + /* Keep track of the user ID across sessions */ + purple_blist_node_set_int(&buddy->node, "UserID", user->id); + msim_store_user_info(session, msg, NULL); } else { purple_debug_info("msim", "msim_status: found buddy %s\n", username); @@ -2866,7 +2866,8 @@ /* 3. Update buddy information */ user = msim_get_user_from_buddy(buddy); - /* All buddies on list should have 'uid' integer associated with them. */ + user->id = uid; + /* Keep track of the user ID across sessions */ purple_blist_node_set_int(&buddy->node, "UserID", uid); /* Stores a few fields in the MsimUser, relevant to the buddy itself. diff -r 1af3baa61c9f -r 128a77f3b3c4 libpurple/protocols/myspace/user.c --- a/libpurple/protocols/myspace/user.c Fri Dec 12 03:46:36 2008 +0000 +++ b/libpurple/protocols/myspace/user.c Fri Dec 12 04:01:39 2008 +0000 @@ -63,6 +63,7 @@ /* TODO: where is this freed? */ user = g_new0(MsimUser, 1); user->buddy = buddy; + user->id = purple_blist_node_get_int(&buddy->node, "UserID"); buddy->proto_data = (gpointer)user; } @@ -96,7 +97,6 @@ { PurplePresence *presence; gchar *str; - guint uid; guint cv; /* Useful to identify the account the tooltip refers to. @@ -170,13 +170,12 @@ g_free(client); } - uid = user->buddy ? purple_blist_node_get_int(&user->buddy->node, "UserID") : 0; - if (full && uid) { + if (full && user->id) { /* TODO: link to username, if available */ char *profile; purple_notify_user_info_add_section_break(user_info); profile = g_strdup_printf("%s", - uid, _("View web profile")); + user->id, _("View web profile")); purple_notify_user_info_add_pair(user_info, NULL, profile); g_free(profile); } @@ -251,10 +250,11 @@ { if (g_str_equal(key_str, "UserID") || g_str_equal(key_str, "ContactID")) { /* Save to buddy list, if it exists, for quick cached uid lookup with msim_uid2username_from_blist(). */ + user->id = atol(value_str); if (user->buddy) { purple_debug_info("msim", "associating uid %s with username %s\n", key_str, user->buddy->name); - purple_blist_node_set_int(&user->buddy->node, "UserID", atol(value_str)); + purple_blist_node_set_int(&user->buddy->node, "UserID", user->id); } /* Need to store in MsimUser, too? What if not on blist? */ } else if (g_str_equal(key_str, "Age")) { diff -r 1af3baa61c9f -r 128a77f3b3c4 libpurple/protocols/myspace/user.h --- a/libpurple/protocols/myspace/user.h Fri Dec 12 03:46:36 2008 +0000 +++ b/libpurple/protocols/myspace/user.h Fri Dec 12 04:01:39 2008 +0000 @@ -25,6 +25,7 @@ typedef struct _MsimUser { PurpleBuddy *buddy; + int id; guint client_cv; gchar *client_info; guint age;