changeset 25860:d51b8647d43c

applied changes from 70fa4cc384b7643ab1f296bdc2399bc208542a20 through f0df27a299120baecf9ea88a9fb24ffe1dbe72fd ChangeLog for the above
author Ethan Blanton <elb@pidgin.im>
date Tue, 28 Apr 2009 20:55:35 +0000
parents 1b8c18ab762f
children 7f552614ec8a
files ChangeLog libpurple/protocols/msn/notification.c libpurple/protocols/msn/session.h
diffstat 3 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Apr 28 20:51:59 2009 +0000
+++ b/ChangeLog	Tue Apr 28 20:55:35 2009 +0000
@@ -12,6 +12,8 @@
 
 	MSN:
 	* Fix a race condition causing occasional Pidgin crashes.
+	* Fix some errors about the friendly name changing too fast caused
+	  by MSN/Yahoo integration buddies.
 
 	Yahoo:
 	* Fix a crash when sending very long messages.
--- a/libpurple/protocols/msn/notification.c	Tue Apr 28 20:51:59 2009 +0000
+++ b/libpurple/protocols/msn/notification.c	Tue Apr 28 20:55:35 2009 +0000
@@ -630,7 +630,7 @@
 
 	} else {
 		purple_debug_error("msn",
-		                   "Got FQY update for unkwown user %s on network %d.\n",
+		                   "Got FQY update for unknown user %s on network %d.\n",
 		                   passport, network);
 	}
 }
@@ -685,6 +685,9 @@
 			if (++adl_count % 150 == 0) {
 				payload = xmlnode_to_str(adl_node, &payload_len);
 
+				/* ADL's are returned all-together */
+				session->adl_fqy++;
+
 				msn_notification_post_adl(session->notification->cmdproc,
 					payload, payload_len);
 
@@ -696,6 +699,9 @@
 				xmlnode_set_attrib(adl_node, "l", "1");
 			}
 		} else {
+			/* FQY's are returned one-at-a-time */
+			session->adl_fqy++;
+
 			msn_add_contact_xml(session, fqy_node, user->passport,
 				0, user->networkid);
 
@@ -717,6 +723,9 @@
 	if (adl_count == 0 || adl_count % 150 != 0) {
 		payload = xmlnode_to_str(adl_node, &payload_len);
 
+		/* ADL's are returned all-together */
+		session->adl_fqy++;
+
 		msn_notification_post_adl(session->notification->cmdproc, payload, payload_len);
 
 		g_free(payload);
@@ -803,7 +812,8 @@
 
 	if (!strcmp(cmd->params[1], "OK")) {
 		/* ADL ack */
-		msn_session_finish_login(session);
+		if (--session->adl_fqy == 0)
+			msn_session_finish_login(session);
 	} else {
 		cmdproc->last_cmd->payload_cb = adl_cmd_parse;
 		cmd->payload_len = atoi(cmd->params[1]);
--- a/libpurple/protocols/msn/session.h	Tue Apr 28 20:51:59 2009 +0000
+++ b/libpurple/protocols/msn/session.h	Tue Apr 28 20:55:35 2009 +0000
@@ -90,6 +90,7 @@
 
 	gboolean connected;
 	gboolean logged_in; /**< A temporal flag to ignore local buddy list adds. */
+	int      adl_fqy; /**< A count of ADL/FQY so status is only changed once. */
 	gboolean destroying; /**< A flag that states if the session is being destroyed. */
 	gboolean http_method;