Mercurial > pidgin.yaz
diff src/blist.c @ 10853:2409700be3dc
[gaim-migrate @ 12527]
(15:46:50) LSchiere2: grim: commit message?
(15:47:01) grim: LSchiere2: whatever..[sic]
grim fixed a crash and some oddness in renaming groups. a related patch
went into oldstatus a while back (also from grim). This is the HEAD
version, removing a server.[ch] function in the process.
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Tue, 19 Apr 2005 19:48:29 +0000 |
parents | fa06fda62868 |
children | 4a4f2760a9ad |
line wrap: on
line diff
--- a/src/blist.c Tue Apr 19 16:00:20 2005 +0000 +++ b/src/blist.c Tue Apr 19 19:48:29 2005 +0000 @@ -988,9 +988,43 @@ ops->update(gaimbuddylist, (GaimBlistNode*)source); /* Notify all PRPLs */ - for (accts = gaim_group_get_accounts(source); accts; accts = g_slist_remove(accts, accts->data)) { - GaimAccount *account = accts->data; - serv_rename_group(account->gc, old_name, source, moved_buddies); + if(old_name && source && strcmp(source->name, old_name)) { + for (accts = gaim_group_get_accounts(source); accts; accts = g_slist_remove(accts, accts->data)) { + GaimAccount *account = accts->data; + GaimPluginProtocolInfo *prpl_info = NULL; + GList *l = NULL, *buddies = NULL; + + if(account->gc && account->gc->prpl) + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); + + if(!prpl_info) + continue; + + for(l = moved_buddies; l; l = l->next) { + GaimBuddy *buddy = (GaimBuddy *)l->data; + + if(buddy && buddy->account == account) + buddies = g_list_append(buddies, (GaimBlistNode *)buddy); + } + + if(prpl_info->rename_group) { + prpl_info->rename_group(account->gc, old_name, source, buddies); + } else { + GList *cur, *groups = NULL; + + /* Make a list of what the groups each buddy is in */ + for(cur = buddies; cur; cur = cur->next) { + GaimBlistNode *node = (GaimBlistNode *)cur->data; + groups = g_list_append(groups, node->parent->parent); + } + + serv_remove_buddies(account->gc, buddies, groups); + g_list_free(groups); + serv_add_buddies(account->gc, buddies); + } + + g_list_free(buddies); + } } g_list_free(moved_buddies); g_free(old_name);