changeset 24722:daabf16bd511

When getting the privacy lists, set the default network to unknown. If the buddy is a PassportMember, then the network is Passport, otherwise it is obtained from the MSN.IM.BuddyType annotation. Next change fixes the case where there is no annotation (if the buddy was added with older version of Pidgin, perhaps). References #3322. References #6755.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sun, 14 Dec 2008 05:22:52 +0000
parents bba38f03085d
children f3950234b164
files libpurple/protocols/msn/contact.c
diffstat 1 files changed, 16 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/protocols/msn/contact.c	Sun Dec 14 04:09:23 2008 +0000
+++ b/libpurple/protocols/msn/contact.c	Sun Dec 14 05:22:52 2008 +0000
@@ -224,19 +224,24 @@
 	char *member_id = xmlnode_get_data(xmlnode_get_child(member, "MembershipId"));
 	MsnUser *user = msn_userlist_find_add_user(session->userlist, passport, NULL);
 	xmlnode *annotation;
-	guint nid = MSN_NETWORK_PASSPORT;
+	guint nid = MSN_NETWORK_UNKNOWN;
 
-	for (annotation = xmlnode_get_child(member, "Annotations/Annotation");
-	     annotation;
-	     annotation = xmlnode_get_next_twin(annotation)) {
-		char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name"));
-		if (name && !strcmp(name, "MSN.IM.BuddyType")) {
-			char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value"));
-			if (value != NULL)
-				nid = strtoul(value, NULL, 10);
-			g_free(value);
+	/* For EmailMembers, the network must be found in the annotations. */
+	if (!strcmp(node, "PassportName")) {
+		nid = MSN_NETWORK_PASSPORT;
+	} else {
+		for (annotation = xmlnode_get_child(member, "Annotations/Annotation");
+		     annotation;
+		     annotation = xmlnode_get_next_twin(annotation)) {
+			char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name"));
+			if (name && !strcmp(name, "MSN.IM.BuddyType")) {
+				char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value"));
+				if (value != NULL)
+					nid = strtoul(value, NULL, 10);
+				g_free(value);
+			}
+			g_free(name);
 		}
-		g_free(name);
 	}
  
 	purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s, NetworkID: %u\n",