src/protocols/msn/contact.c

branch
soc.2006.msnp13
changeset 13856
a6511183749e
parent 13855
24cff9e060d7
child 13857
c890f17bf06d
--- a/src/protocols/msn/contact.c	Mon Jul 17 12:22:37 2006 +0000
+++ b/src/protocols/msn/contact.c	Sun Jul 23 09:19:12 2006 +0000
@@ -90,10 +90,8 @@
 		return MSN_LIST_AL_OP;
 	}else if(!strcmp(role,"Block")){
 		return MSN_LIST_BL_OP;
-	}else if(!strcmp(role,"Reverse")){
-		return MSN_LIST_RL_OP;
-	}else if(!strcmp(role,"Forward")){
-		return MSN_LIST_FL_OP;
+//	}else if(!strcmp(role,"Reverse")){
+//		return MSN_LIST_RL_OP;
 	}
 	return 0;
 }
@@ -120,7 +118,7 @@
 	xmlnode *membershipnode,*members,*member,*passportNode,*role;
 
 	session = contact->session;
-	gaim_debug_misc("xml","parse contact list:{%s}\nsize:%d\n",contact->soapconn->body,contact->soapconn->body_len);
+//	gaim_debug_misc("xml","parse contact list:{%s}\nsize:%d\n",contact->soapconn->body,contact->soapconn->body_len);
 	node = 	xmlnode_from_str(contact->soapconn->body, contact->soapconn->body_len);
 //	node = 	xmlnode_from_str(contact->soapconn->body, -1);
 
@@ -144,22 +142,33 @@
 	for(membershipnode = xmlnode_get_child(memberships, "Membership"); membershipnode;
 					membershipnode = xmlnode_get_next_twin(membershipnode)){
 		role = xmlnode_get_child(membershipnode,"MemberRole");
-	//	gaim_debug_misc("memberrole","role:%s\n",xmlnode_get_data(role));
 		list_op = msn_get_memberrole(xmlnode_get_data(role));
 		gaim_debug_misc("memberrole","role:%s,list_op:%d\n",xmlnode_get_data(role),list_op);
 		members = xmlnode_get_child(membershipnode,"Members");
 		for(member = xmlnode_get_child(members, "Member"); member;
 				member = xmlnode_get_next_twin(member)){
-			passportNode = xmlnode_get_child(member,"PassportName");
-			passport = xmlnode_get_data(passportNode);
-			gaim_debug_misc("Passport","name:%s\n",passport);
-			user = msn_userlist_find_user(session->userlist, passport);
-			if (user == NULL){
-				user = msn_user_new(session->userlist, passport, "");
-				msn_userlist_add_user(session->userlist, user);
+			xmlnode * typeNode;
+			char * type;
+
+			gaim_debug_misc("MaYuan","type:%s\n",xmlnode_get_attrib(member,"type"));
+			if(!g_strcasecmp(xmlnode_get_attrib(member,"type"),"PassportMember")){
+				passportNode = xmlnode_get_child(member,"PassportName");
+				passport = xmlnode_get_data(passportNode);
+				typeNode = xmlnode_get_child(member,"Type");
+				type = xmlnode_get_data(typeNode);
+				gaim_debug_misc("Passport","name:%s,type:%s\n",passport,type);
+				user = msn_userlist_find_user(session->userlist, passport);
+				if (user == NULL){
+					user = msn_user_new(session->userlist, passport, "");
+					msn_userlist_add_user(session->userlist, user);
+				}
+//				user->list_op |= list_op;
+				msn_got_lst_user(session, user, list_op, NULL);
 			}
-//			user->list_op |= list_op;
-			msn_got_lst_user(session, user, list_op, NULL);
+			if(!g_strcasecmp(xmlnode_get_attrib(member,"type"),"PhoneMember")){
+			}
+			if(!g_strcasecmp(xmlnode_get_attrib(member,"type"),"EmailMember")){
+			}
 		}
 	}
 
@@ -255,7 +264,15 @@
 	for(contactNode = xmlnode_get_child(contacts, "Contact"); contactNode;
 				contactNode = xmlnode_get_next_twin(contactNode)){
 		MsnUser *user;
+		xmlnode *messengerEnableNode;
 		char *passport,*Name,*uid,*type;
+		char *messengerEnable;
+
+		messengerEnableNode = xmlnode_get_child(contactNode,"isMessengerEnabled");
+		messengerEnable = xmlnode_get_data(messengerEnableNode);
+		if(!g_strcasecmp(messengerEnable,"false")){
+			continue;
+		}
 
 		contactId= xmlnode_get_child(contactNode,"contactId");
 		uid = xmlnode_get_data(contactId);
@@ -265,6 +282,10 @@
 		type = xmlnode_get_data(contactType);
 
 		passportName = xmlnode_get_child(contactInfo,"passportName");
+		if(passportName == NULL){
+			/*TODO: add it to the none-instant Messenger group and recognize as email Membership*/
+			continue;
+		}
 		passport = xmlnode_get_data(passportName);
 
 		displayName = xmlnode_get_child(contactInfo,"displayName");
@@ -282,19 +303,40 @@
 		}
 		msn_user_set_uid(user,uid);
 		msn_user_set_type(user,msn_get_user_type(type));
+		user->list_op |= 1;
 
 		groupIds = xmlnode_get_child(contactInfo,"groupIds");
 		if(groupIds){
 			for(guid = xmlnode_get_child(groupIds, "guid");guid;
 							guid = xmlnode_get_next_twin(guid)){
-				char * group_id;
+				char *group_id;
 
 				group_id = xmlnode_get_data(guid);
 				msn_user_add_group_id(user,group_id);
 				gaim_debug_misc("contact","guid:%s\n",group_id);
 			}
 		}else{
+			char *name,*group_id;
+
+			name = g_strdup(MSN_INDIVIDUALS_GROUP_NAME);
+			group_id = g_strdup(MSN_INDIVIDUALS_GROUP_ID);
+
+			msn_user_add_group_id(user,group_id);
+			msn_group_new(session->userlist, group_id, name);
+
+			if (group_id == NULL)
+					/* Group of ungroupped buddies */
+					continue;
+
+			if ((gaim_find_group(name)) == NULL){
+					GaimGroup *g = gaim_group_new(name);
+					gaim_blist_add_group(g, NULL);
+			}
+
 			gaim_debug_misc("contact","guid is NULL\n");
+			g_free(name);
+			g_free(group_id);
+
 		}
 	}
 
@@ -304,6 +346,7 @@
 	msn_soap_free_read_buf(contact->soapconn);
 
 	dump_adl_cmd(session);
+	msn_set_psm(session);
 	msn_session_finish_login(session);
 }
 

mercurial