diff options
author | Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im> | 2012-07-14 17:50:13 +0200 |
---|---|---|
committer | Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im> | 2012-07-14 17:50:13 +0200 |
commit | 2aa5b3b37021ec24b647020f6672e938159eff51 (patch) | |
tree | 4038e3ac98d4e3606f2205da723d62f4013240ca | |
parent | fa70708430bfa4357b5aa7e5dd0029051f6e6049 (diff) | |
download | pidgin-2aa5b3b37021ec24b647020f6672e938159eff51.tar.gz |
Gadu-Gadu: roster - default group rename
-rw-r--r-- | libpurple/protocols/gg/purplew.c | 29 | ||||
-rw-r--r-- | libpurple/protocols/gg/purplew.h | 4 | ||||
-rw-r--r-- | libpurple/protocols/gg/roster.c | 21 |
3 files changed, 44 insertions, 10 deletions
diff --git a/libpurple/protocols/gg/purplew.c b/libpurple/protocols/gg/purplew.c index 0d439829fa..d125c08369 100644 --- a/libpurple/protocols/gg/purplew.c +++ b/libpurple/protocols/gg/purplew.c @@ -59,7 +59,34 @@ PurpleGroup * ggp_purplew_buddy_get_group_only(PurpleBuddy *buddy) PurpleGroup *group = purple_buddy_get_group(buddy); if (!group) return NULL; - if (0 == strcmp(_("Buddies"), purple_group_get_name(group))) + if (0 == strcmp(GGP_PURPLEW_GROUP_DEFAULT, purple_group_get_name(group))) return NULL; return group; } + +GList * ggp_purplew_group_get_buddies(PurpleGroup *group, PurpleAccount *account) +{ + GList *buddies = NULL; + PurpleBlistNode *gnode, *cnode, *bnode; + + g_return_val_if_fail(group != NULL, NULL); + + gnode = PURPLE_BLIST_NODE(group); + for (cnode = gnode->child; cnode; cnode = cnode->next) + { + if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) + continue; + for (bnode = cnode->child; bnode; bnode = bnode->next) + { + PurpleBuddy *buddy; + if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) + continue; + + buddy = PURPLE_BUDDY(bnode); + if (account == NULL || buddy->account == account) + buddies = g_list_append(buddies, buddy); + } + } + + return buddies; +} diff --git a/libpurple/protocols/gg/purplew.h b/libpurple/protocols/gg/purplew.h index ec37e6626c..2f2ce1289f 100644 --- a/libpurple/protocols/gg/purplew.h +++ b/libpurple/protocols/gg/purplew.h @@ -4,6 +4,8 @@ #include <internal.h> #include <libgadu.h> +#define GGP_PURPLEW_GROUP_DEFAULT _("Buddies") + /** * Adds an input handler in purple event loop for http request. * @@ -39,4 +41,6 @@ void ggp_purplew_request_processing_done( // ignores default group PurpleGroup * ggp_purplew_buddy_get_group_only(PurpleBuddy *buddy); +GList * ggp_purplew_group_get_buddies(PurpleGroup *group, PurpleAccount *account); + #endif /* _GGP_PURPLEW_H */ diff --git a/libpurple/protocols/gg/roster.c b/libpurple/protocols/gg/roster.c index 317e153b4c..fd0647a4a0 100644 --- a/libpurple/protocols/gg/roster.c +++ b/libpurple/protocols/gg/roster.c @@ -12,7 +12,6 @@ #define GGP_ROSTER_GROUPID_DEFAULT "00000000-0000-0000-0000-000000000000" // TODO: ignored contacts synchronization (?) -// TODO: rename default group typedef struct { @@ -343,7 +342,7 @@ static gboolean ggp_roster_reply_list_read_group(xmlnode *node, ggp_roster_conte is_bot = (strcmp(id, "0b345af6-0001-0000-0000-000000000004") == 0 || g_strcmp0(name, "Pomocnicy") == 0); is_default = (strcmp(id, GGP_ROSTER_GROUPID_DEFAULT) == 0 || - g_strcmp0(name, _("Buddies")) == 0 || + g_strcmp0(name, GGP_PURPLEW_GROUP_DEFAULT) == 0 || g_strcmp0(name, _("[default]")) == 0); if (!content->bots_group_id && is_bot) @@ -792,10 +791,10 @@ static gboolean ggp_roster_send_update_contact_remove(PurpleConnection *gc, ggp_ static gboolean ggp_roster_send_update_group_rename(PurpleConnection *gc, ggp_roster_change *change) { + PurpleAccount *account = purple_connection_get_account(gc); ggp_roster_content *content = ggp_roster_get_rdata(gc)->content; const char *old_name = change->data.group_rename.old_name; const char *new_name = change->data.group_rename.new_name; - //PurpleGroup *group; xmlnode *group_node; const char *group_id; @@ -803,15 +802,19 @@ static gboolean ggp_roster_send_update_group_rename(PurpleConnection *gc, ggp_ro purple_debug_misc("gg", "ggp_roster_send_update_group_rename: old_name=%s, new_name=%s\n", old_name, new_name); - /* - group = purple_find_group(old_name); - if (!group) + if (0 == g_strcmp0(old_name, GGP_PURPLEW_GROUP_DEFAULT) || + 0 == g_strcmp0(new_name, GGP_PURPLEW_GROUP_DEFAULT)) { - purple_debug_info("gg", "ggp_roster_send_update_group_rename: %s not found\n", old_name); + PurpleGroup *group; + GList *group_buddies; + group = purple_find_group(new_name); + if (!group) + return TRUE; + purple_debug_info("gg", "ggp_roster_send_update_group_rename: invalidating buddies in default group\n"); + for (group_buddies = ggp_purplew_group_get_buddies(group, account); group_buddies; group_buddies = g_list_remove_link(group_buddies, group_buddies)) + ggp_roster_set_synchronized(gc, group_buddies->data, FALSE); return TRUE; } - */ - group_id = g_hash_table_lookup(content->group_ids, old_name); if (!group_id) { |