diff libpurple/protocols/myspace/myspace.c @ 18915:bfc52862d864

Show buddy icons.
author Jeffrey Connelly <jaconnel@calpoly.edu>
date Mon, 13 Aug 2007 01:36:30 +0000
parents 2b26ba483d87
children 0f46f13c0805
line wrap: on
line diff
--- 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;