Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/contact.c @ 26991:2a95e8bd9b80
Parse the invite message out of the pending membership list so that it can
be presented to the user when someone adds us to their buddy list.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Tue, 19 May 2009 03:16:45 +0000 |
parents | 6db0d455813b |
children | 01f1929d0936 |
comparison
equal
deleted
inserted
replaced
26990:16255111b180 | 26991:2a95e8bd9b80 |
---|---|
355 char *type = xmlnode_get_data(xmlnode_get_child(member, "Type")); | 355 char *type = xmlnode_get_data(xmlnode_get_child(member, "Type")); |
356 char *member_id = xmlnode_get_data(xmlnode_get_child(member, "MembershipId")); | 356 char *member_id = xmlnode_get_data(xmlnode_get_child(member, "MembershipId")); |
357 MsnUser *user = msn_userlist_find_add_user(session->userlist, passport, NULL); | 357 MsnUser *user = msn_userlist_find_add_user(session->userlist, passport, NULL); |
358 xmlnode *annotation; | 358 xmlnode *annotation; |
359 guint nid = MSN_NETWORK_UNKNOWN; | 359 guint nid = MSN_NETWORK_UNKNOWN; |
360 | 360 char *invite = NULL; |
361 /* For EmailMembers, the network must be found in the annotations. */ | 361 |
362 if (!strcmp(node, "PassportName")) { | 362 for (annotation = xmlnode_get_child(member, "Annotations/Annotation"); |
363 annotation; | |
364 annotation = xmlnode_get_next_twin(annotation)) { | |
365 char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name")); | |
366 char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value")); | |
367 if (name && value) { | |
368 if (!strcmp(name, "MSN.IM.BuddyType")) { | |
369 nid = strtoul(value, NULL, 10); | |
370 } | |
371 else if (!strcmp(name, "MSN.IM.InviteMessage")) { | |
372 invite = value; | |
373 value = NULL; | |
374 } | |
375 } | |
376 g_free(name); | |
377 g_free(value); | |
378 } | |
379 | |
380 /* For EmailMembers, the network must be found in the annotations, above. | |
381 Otherwise, PassportMembers are on the Passport network. */ | |
382 if (!strcmp(node, "PassportName")) | |
363 nid = MSN_NETWORK_PASSPORT; | 383 nid = MSN_NETWORK_PASSPORT; |
364 } else { | |
365 for (annotation = xmlnode_get_child(member, "Annotations/Annotation"); | |
366 annotation; | |
367 annotation = xmlnode_get_next_twin(annotation)) { | |
368 char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name")); | |
369 if (name && !strcmp(name, "MSN.IM.BuddyType")) { | |
370 char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value")); | |
371 if (value != NULL) | |
372 nid = strtoul(value, NULL, 10); | |
373 g_free(value); | |
374 } | |
375 g_free(name); | |
376 } | |
377 } | |
378 | 384 |
379 purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s, NetworkID: %u\n", | 385 purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s, NetworkID: %u\n", |
380 node, passport, type, member_id == NULL ? "(null)" : member_id, nid); | 386 node, passport, type, member_id == NULL ? "(null)" : member_id, nid); |
381 | 387 |
382 msn_user_set_network(user, nid); | 388 msn_user_set_network(user, nid); |
389 msn_user_set_invite_message(user, invite); | |
383 | 390 |
384 if (member_id) { | 391 if (member_id) { |
385 user->membership_id[list] = atoi(member_id); | 392 user->membership_id[list] = atoi(member_id); |
386 } | 393 } |
387 | 394 |
388 msn_got_lst_user(session, user, 1 << list, NULL); | 395 msn_got_lst_user(session, user, 1 << list, NULL); |
389 | 396 |
390 g_free(passport); | 397 g_free(passport); |
391 g_free(type); | 398 g_free(type); |
392 g_free(member_id); | 399 g_free(member_id); |
400 g_free(invite); | |
393 } | 401 } |
394 | 402 |
395 static void | 403 static void |
396 msn_parse_each_service(MsnSession *session, xmlnode *service) | 404 msn_parse_each_service(MsnSession *session, xmlnode *service) |
397 { | 405 { |