Mercurial > pidgin
changeset 25395:89670ae028bd
The MSN AddressBook can contain contacts with global isMessengerUser=false,
but with isMessengerEnabled=true for a specific email (for federated/Yahoo!
buddies).
Re-arrange the code so it will find these types of contacts as well instead
of bailing when it thinks that the contact is not (globally) enabled for
messenger.
Now it should stop attempting to add federated/Yahoo! buddies to your list
repeatedly every time you sign in. You may need to manually remove the
duplicates (Not in Pidgin/Finch. See the FAQ for more info).
References #3322.
References #6755.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sat, 31 Jan 2009 07:37:11 +0000 |
parents | ea9e0fa89c02 |
children | 06a802d32d71 |
files | ChangeLog libpurple/protocols/msn/contact.c |
diffstat | 2 files changed, 33 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Jan 30 03:27:38 2009 +0000 +++ b/ChangeLog Sat Jan 31 07:37:11 2009 +0000 @@ -2,11 +2,7 @@ version 2.5.5 (??/??/????): libpurple: - * Fix transfer of buddy icons, custom smileys, and files from the - latest Windows Live Messenger 9 official client. (Thomas - Gibson-Robinson) * Fix a crash when removing an account with an unknown protocol id. - * Large (multi-part) messages on MSN are now correctly re-combined. * Beta support for SSL connections for AIM and ICQ accounts. To enable, check the "Use SSL" option from the Advanced tab when editing your AIM or ICQ account. (Paul Aurich) @@ -14,6 +10,15 @@ and other libpurple clients (fixes with libpurple users only on statuses other than Available). (Daniel Ljungborg) + MSN: + * Fix transfer of buddy icons, custom smileys, and files from the + latest Windows Live Messenger 9 official client. (Thomas + Gibson-Robinson) + * Large (multi-part) messages are now correctly re-combined. + * Federated/Yahoo! buddies should now stop creating sync issues at + every signin. You may need to remove duplicates in the Address + Book. See the FAQ for more information. + Finch: * Allow rebinding keys to change the focused widget (details in the man-page, look for GntBox::binding)
--- a/libpurple/protocols/msn/contact.c Fri Jan 30 03:27:38 2009 +0000 +++ b/libpurple/protocols/msn/contact.c Sat Jan 31 07:37:11 2009 +0000 @@ -243,7 +243,7 @@ g_free(name); } } - + purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s, NetworkID: %u\n", node, passport, type, member_id == NULL ? "(null)" : member_id, nid); @@ -525,7 +525,7 @@ for(contactNode = xmlnode_get_child(node, "Contact"); contactNode; contactNode = xmlnode_get_next_twin(contactNode)) { - xmlnode *contactId, *contactInfo, *contactType, *passportName, *displayName, *guid, *groupIds, *messenger_user; + xmlnode *contactId, *contactInfo, *contactType, *passportName, *displayName, *guid, *groupIds; xmlnode *annotation; MsnUser *user; @@ -556,58 +556,52 @@ continue; /* Not adding own account as buddy to buddylist */ } - /* ignore non-messenger contacts */ - if ((messenger_user = xmlnode_get_child(contactInfo, "isMessengerUser"))) { - char *is_messenger_user = xmlnode_get_data(messenger_user); - - if(is_messenger_user && !strcmp(is_messenger_user, "false")) { - g_free(is_messenger_user); - continue; - } - - g_free(is_messenger_user); - } - 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*/ - /*Yahoo User?*/ + /*TODO: add it to the non-instant Messenger group and recognize as email Membership*/ + /* Yahoo/Federated User? */ emailsNode = xmlnode_get_child(contactInfo, "emails"); if (emailsNode == NULL) { /*TODO: need to support the Mobile type*/ continue; } for (contactEmailNode = xmlnode_get_child(emailsNode, "ContactEmail"); contactEmailNode; - contactEmailNode = xmlnode_get_next_twin(contactEmailNode) ){ - if (!(messengerEnabledNode = xmlnode_get_child(contactEmailNode, "isMessengerEnabled"))) { - /* XXX: Should this be a continue instead of a break? It seems like it'd cause unpredictable results otherwise. */ - break; - } + contactEmailNode = xmlnode_get_next_twin(contactEmailNode)) { + if (!(messengerEnabledNode = xmlnode_get_child(contactEmailNode, "isMessengerEnabled"))) + continue; msnEnabled = xmlnode_get_data(messengerEnabledNode); - if ((emailNode = xmlnode_get_child(contactEmailNode, "email"))) { - g_free(passport); - passport = xmlnode_get_data(emailNode); - } + if (msnEnabled && !strcmp(msnEnabled, "true")) { + if ((emailNode = xmlnode_get_child(contactEmailNode, "email"))) + passport = xmlnode_get_data(emailNode); - if (msnEnabled && !strcmp(msnEnabled, "true")) { /*Messenger enabled, Get the Passport*/ - purple_debug_info("msn", "AB Yahoo User %s\n", passport ? passport : "(null)"); + purple_debug_info("msn", "AB Yahoo/Federated User %s\n", passport ? passport : "(null)"); g_free(msnEnabled); break; - } else { - /*TODO maybe we can just ignore it in Purple?*/ - purple_debug_info("msn", "AB Other type user\n"); } g_free(msnEnabled); } } else { + xmlnode *messenger_user; + /* ignore non-messenger contacts */ + if ((messenger_user = xmlnode_get_child(contactInfo, "isMessengerUser"))) { + char *is_messenger_user = xmlnode_get_data(messenger_user); + + if (is_messenger_user && !strcmp(is_messenger_user, "false")) { + g_free(is_messenger_user); + continue; + } + + g_free(is_messenger_user); + } + passport = xmlnode_get_data(passportName); }