Mercurial > pidgin.yaz
changeset 22929:25e4a0add118
Make MSN buddy list synchronization more forgiving, only ask about
buddies who appear to have disappeared completely from the server list
instead of those that have simply moved groups.
References #945, #1184
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Tue, 13 May 2008 20:43:21 +0000 |
parents | 4fa01df51fec |
children | 3ed8f8d074e4 |
files | ChangeLog libpurple/protocols/msn/session.c libpurple/protocols/msnp9/session.c |
diffstat | 3 files changed, 35 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue May 13 18:56:11 2008 +0000 +++ b/ChangeLog Tue May 13 20:43:21 2008 +0000 @@ -15,6 +15,9 @@ libnm-glib. Hopefully it's stable now. It will now compile by default if you have D-Bus support and NetworkManager.h. (Elliott Sales de Andrade) + * Make MSN buddy list synchronization more forgiving, only ask about + buddies who appear to have disappeared completely from the server list + instead of those that have simply moved groups. Pidgin: * The typing notification in the conversation history can be disabled or
--- a/libpurple/protocols/msn/session.c Tue May 13 18:56:11 2008 +0000 +++ b/libpurple/protocols/msn/session.c Tue May 13 20:43:21 2008 +0000 @@ -274,6 +274,7 @@ { PurpleBlistNode *gnode, *cnode, *bnode; PurpleConnection *gc = purple_account_get_connection(session->account); + GList *to_remove = NULL; g_return_if_fail(gc != NULL); @@ -316,16 +317,28 @@ } } + /* We don't care if they're in a different group, as long as they're on the + * list somewhere. If we check for the group, we cause pain, agony and + * suffering for people who decide to re-arrange their buddy list elsewhere. + */ if (!found) { - /* The user was not on the server list or not in that group - * on the server list */ - msn_show_sync_issue(session, purple_buddy_get_name(b), group_name); + if ((remote_user == NULL) || !(remote_user->list_op & MSN_LIST_FL_OP)) { + /* The user is not on the server list */ + msn_show_sync_issue(session, purple_buddy_get_name(b), group_name); + } else { + /* The user is not in that group on the server list */ + to_remove = g_list_prepend(to_remove, b); + } } } } } } + + if (to_remove != NULL) { + g_list_foreach(to_remove, (GFunc)purple_blist_remove_buddy, NULL); + } } void
--- a/libpurple/protocols/msnp9/session.c Tue May 13 18:56:11 2008 +0000 +++ b/libpurple/protocols/msnp9/session.c Tue May 13 20:43:21 2008 +0000 @@ -223,6 +223,7 @@ { PurpleBlistNode *gnode, *cnode, *bnode; PurpleConnection *gc = purple_account_get_connection(session->account); + GList *to_remove = NULL; g_return_if_fail(gc != NULL); @@ -268,16 +269,28 @@ } + /* We don't care if they're in a different group, as long as they're on the + * list somewhere. If we check for the group, we cause pain, agony and + * suffering for people who decide to re-arrange their buddy list elsewhere. + */ if (!found) { - /* The user was not on the server list or not in that group - * on the server list */ - msn_show_sync_issue(session, purple_buddy_get_name(b), group_name); + if ((remote_user == NULL) || !(remote_user->list_op & MSN_LIST_FL_OP)) { + /* The user is not on the server list */ + msn_show_sync_issue(session, purple_buddy_get_name(b), group_name); + } else { + /* The user is not in that group on the server list */ + to_remove = g_list_prepend(to_remove, b); + } } } } } } + + if (to_remove != NULL) { + g_list_foreach(to_remove, (GFunc)purple_blist_remove_buddy, NULL); + } } void