diff src/protocols/msn/contact.c @ 19754:da3f8f7ec3ce

[gaim-migrate @ 16737] can send Message to Yahoo Messenger can receive the Yahoo Message, Need to post it to the conversation committed by Ma Yuan<mayuan2006@gmail.com> committer: Ethan Blanton <elb@pidgin.im>
author Ma Yuan <mayuan2006@gmail.com>
date Sun, 13 Aug 2006 16:01:52 +0000
parents 88b0c434259a
children 22eeb4882d77
line wrap: on
line diff
--- a/src/protocols/msn/contact.c	Sun Aug 13 06:09:48 2006 +0000
+++ b/src/protocols/msn/contact.c	Sun Aug 13 16:01:52 2006 +0000
@@ -112,14 +112,13 @@
 msn_parse_contact_list(MsnContact * contact)
 {
 	MsnSession * session;
-	MsnUser *user;
 	int list_op =0;
 	char * passport;
 	xmlnode * node,*body,*response,*result,*services,*service,*memberships;
 	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);
 
@@ -148,6 +147,7 @@
 		members = xmlnode_get_child(membershipnode,"Members");
 		for(member = xmlnode_get_child(members, "Member"); member;
 				member = xmlnode_get_next_twin(member)){
+			MsnUser *user;
 			xmlnode * typeNode;
 			char * type;
 
@@ -158,17 +158,20 @@
 				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;
+
+				user = msn_userlist_find_add_user(session->userlist,passport,NULL);
 				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")){
+				xmlnode *emailNode;
+
+				emailNode = xmlnode_get_child(member,"Email");
+				passport = xmlnode_get_data(emailNode);
+				gaim_debug_info("Email","name:%s,list_op:%d\n",passport,list_op);
+				user = msn_userlist_find_add_user(session->userlist,passport,NULL);
+				msn_got_lst_user(session,user,list_op,NULL);
 			}
 		}
 	}
@@ -306,10 +309,27 @@
 
 		passportName = xmlnode_get_child(contactInfo,"passportName");
 		if(passportName == NULL){
+			xmlnode *emailsNode, *contactEmailNode, *emailNode;
+			xmlnode *messengerEnabledNode;
+			char *msnEnabled;
+
 			/*TODO: add it to the none-instant Messenger group and recognize as email Membership*/
-			continue;
+			/*Yahoo User?*/
+			emailsNode = xmlnode_get_child(contactInfo,"emails");
+			for(contactEmailNode = xmlnode_get_child(emailsNode,"ContactEmail");contactEmailNode;
+					contactEmailNode = xmlnode_get_next_twin(contactEmailNode) ){
+				messengerEnabledNode = xmlnode_get_child(contactEmailNode,"isMessengerEnabled");
+				msnEnabled = xmlnode_get_data(messengerEnabledNode);
+				if(!strcmp(msnEnabled,"true")){
+					emailNode = xmlnode_get_child(contactEmailNode,"email");
+					passport = xmlnode_get_data(emailNode);
+					gaim_debug_info("Ma Yuan","Yahoo User %s\n",passport);
+					break;
+				}
+			}
+		}else{
+			passport = xmlnode_get_data(passportName);
 		}
-		passport = xmlnode_get_data(passportName);
 
 		displayName = xmlnode_get_child(contactInfo,"displayName");
 		Name =xmlnode_get_data(displayName);
@@ -319,11 +339,7 @@
 						xmlnode_get_data(contactId),
 						Name);
 
-		user = msn_userlist_find_user(session->userlist, passport);
-		if (user == NULL){
-			user = msn_user_new(session->userlist, passport, Name);
-			msn_userlist_add_user(session->userlist, user);
-		}
+		user = msn_userlist_find_add_user(session->userlist, passport,Name);
 		msn_user_set_uid(user,uid);
 		msn_user_set_type(user,msn_get_user_type(type));
 		user->list_op |= MSN_LIST_FL_OP;