# HG changeset patch # User Jeffrey Connelly # Date 1186968990 0 # Node ID bfc52862d864ec2771885bdef76f3fc078c35314 # Parent 2b26ba483d87f3fb3246c27d21332c6782f5d9e5 Show buddy icons. diff -r 2b26ba483d87 -r bfc52862d864 libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Mon Aug 13 00:43:11 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Mon Aug 13 01:36:30 2007 +0000 @@ -155,6 +155,10 @@ gchar *statstring); static void msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full); + +static void msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, + gsize len, const gchar *error_message); + static void msim_store_user_info_each(gpointer key, gpointer value, gpointer user_data); static gboolean msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user); @@ -2538,6 +2542,28 @@ } } +/** Callback for when a buddy icon finished being downloaded. */ +static void +msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, + gpointer user_data, + const gchar *url_text, + gsize len, + const gchar *error_message) +{ + MsimUser *user; + + user = (MsimUser *)user_data; + + purple_debug_info("msim_downloaded_buddy_icon", + "Downloaded %d bytes\n", len); + + 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); +} + /** Store a field of information about a buddy. */ static void msim_store_user_info_each(gpointer key, gpointer value, gpointer user_data) @@ -2575,7 +2601,16 @@ /* Ignore because PurpleBuddy knows this already */ ; } else if (!strcmp(key_str, "ImageURL")) { + const gchar *previous_url; + user->image_url = g_strdup(value_str); + + previous_url = purple_buddy_icons_get_checksum_for_user(user->buddy); + + /* Only download if URL changed */ + 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 { /* TODO: other fields in MsimUser */ gchar *msg;