summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>2012-07-14 17:50:13 +0200
committerTomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>2012-07-14 17:50:13 +0200
commit2aa5b3b37021ec24b647020f6672e938159eff51 (patch)
tree4038e3ac98d4e3606f2205da723d62f4013240ca
parentfa70708430bfa4357b5aa7e5dd0029051f6e6049 (diff)
downloadpidgin-2aa5b3b37021ec24b647020f6672e938159eff51.tar.gz
Gadu-Gadu: roster - default group rename
-rw-r--r--libpurple/protocols/gg/purplew.c29
-rw-r--r--libpurple/protocols/gg/purplew.h4
-rw-r--r--libpurple/protocols/gg/roster.c21
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)
{