changeset 23499:2d515f8f338e

A patch from felipec to stop requesting the MSN buddy icon when the object is changed in the middle of the request or the buddy has gone offline. References #5377. And http://pidgin.im/pipermail/devel/2008-June/006133.html And http://pidgin.im/pipermail/devel/2008-June/006134.html
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sun, 22 Jun 2008 22:59:50 +0000
parents 80d09f42b157
children 1061a9ad1ddb 455a8264e06e
files libpurple/protocols/msn/slp.c
diffstat 1 files changed, 30 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/protocols/msn/slp.c	Sun Jun 22 21:31:58 2008 +0000
+++ b/libpurple/protocols/msn/slp.c	Sun Jun 22 22:59:50 2008 +0000
@@ -1067,6 +1067,21 @@
 }
 
 static void
+next_buddy_request(MsnUserList *userlist)
+{
+	/* Free one window slot */
+	userlist->buddy_icon_window++;
+
+#ifdef MSN_DEBUG_UD
+	purple_debug_info("msn", "request_user_display(): buddy_icon_window++ yields =%d\n",
+		userlist->buddy_icon_window);
+#endif
+
+	/* Request the next one */
+	msn_release_buddy_icon_request(userlist);
+}
+
+static void
 request_user_display(MsnUser *user)
 {
 	PurpleAccount *account;
@@ -1082,6 +1097,19 @@
 
 	obj = msn_user_get_object(user);
 
+	/* Changed while in the queue. */
+	if (obj == NULL) {
+		purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL);
+		next_buddy_request(session->userlist);
+		return;
+	}
+
+	/* The user went offline. */
+	if (user->status == NULL) {
+		next_buddy_request(session->userlist);
+		return;
+	}
+
 	info = msn_object_get_sha1(obj);
 
 	if (g_ascii_strcasecmp(user->passport,
@@ -1111,14 +1139,7 @@
 
 		purple_buddy_icons_set_for_user(account, user->passport, g_memdup(data, len), len, info);
 
-		/* Free one window slot */
-		session->userlist->buddy_icon_window++;
-
-#ifdef MSN_DEBUG_UD
-		purple_debug_info("msn", "request_user_display(): buddy_icon_window++ yields =%d\n",
-						session->userlist->buddy_icon_window);
-#endif
-
-		msn_release_buddy_icon_request(session->userlist);
+		next_buddy_request(session->userlist);
 	}
 }
+