Tue, 09 Jul 2013 16:18:19 +0530
Refactored blistnodetypes and BuddyList.xs according to API changes
--- a/libpurple/blistnodetypes.c Tue Jul 09 15:48:17 2013 +0530 +++ b/libpurple/blistnodetypes.c Tue Jul 09 16:18:19 2013 +0530 @@ -22,6 +22,7 @@ */ #include "internal.h" #include "dbus-maybe.h" +#include "debug.h" #define PURPLE_BUDDY_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_BUDDY, PurpleBuddyPrivate)) @@ -136,6 +137,8 @@ ((one == NULL || *one == '\0') && (two == NULL || *two == '\0'))); } +PurpleBListNode *purple_blist_get_last_child(PurpleBListNode *node); + /**************************************************************************/ /* Buddy API */ /**************************************************************************/ @@ -155,7 +158,7 @@ purple_signal_emit(purple_blist_get_handle(), "buddy-icon-changed", buddy); - purple_blist_update_node(PURPLE_BLIST_NODE(buddy)); + purple_blist_node_update(PURPLE_BLIST_NODE(buddy)); } PurpleBuddyIcon * @@ -182,10 +185,11 @@ purple_buddy_set_name(PurpleBuddy *buddy, const char *name) { PurpleBuddyPrivate *priv = PURPLE_BUDDY_GET_PRIVATE(buddy); + PurpleBListUiOps *ops = purple_blist_get_ui_ops(); g_return_if_fail(priv != NULL); - purple_blist_update_cache(buddy, name); + purple_blist_update_buddies_cache(buddy, name); g_free(priv->name); priv->name = purple_utf8_strip_unprintables(name); @@ -301,17 +305,17 @@ if ((alias != NULL) && (*alias != '\0')) new_alias = purple_utf8_strip_unprintables(alias); - if (!purple_strings_are_different(priv->alias, new_alias)) { + if (!purple_strings_are_different(priv->local_alias, new_alias)) { g_free(new_alias); return; } - old_alias = priv->alias; + old_alias = priv->local_alias; if ((new_alias != NULL) && (*new_alias != '\0')) - priv->alias = new_alias; + priv->local_alias = new_alias; else { - priv->alias = NULL; + priv->local_alias = NULL; g_free(new_alias); /* could be "\0" */ } @@ -413,7 +417,6 @@ void purple_buddy_update_status(PurpleBuddy *buddy, PurpleStatus *old_status) { - PurpleBListUiOps *ops = purple_blist_get_ui_ops(); PurpleStatus *status; PurpleBListNode *cnode; PurpleContact *contact; @@ -1450,7 +1453,6 @@ } else { /* A simple rename */ PurpleBListNode *cnode, *bnode; - gchar* key; /* Build a GList of all buddies in this group */ for (cnode = PURPLE_BLIST_NODE(source)->child; cnode != NULL; cnode = cnode->next) { @@ -1459,15 +1461,10 @@ moved_buddies = g_list_append(moved_buddies, bnode); } + purple_blist_update_groups_cache(source, new_name); + old_name = priv->name; priv->name = new_name; - - key = g_utf8_collate_key(old_name, -1); - g_hash_table_remove(groups_cache, key); - g_free(key); - - key = g_utf8_collate_key(new_name, -1); - g_hash_table_insert(groups_cache, key, source); } /* Save our changes */
--- a/libpurple/blistnodetypes.h Tue Jul 09 15:48:17 2013 +0530 +++ b/libpurple/blistnodetypes.h Tue Jul 09 16:18:19 2013 +0530 @@ -357,7 +357,7 @@ /** * Returns the correct name to display for a buddy. In order of precedence: - * the buddy's alias; the buddy's server alias; the buddy's contact alias; + * the buddy's local alias; the buddy's server alias; the buddy's contact alias; * the buddy's user name. * * @param buddy The buddy whose alias will be returned.
--- a/libpurple/buddylist.c Tue Jul 09 15:48:17 2013 +0530 +++ b/libpurple/buddylist.c Tue Jul 09 16:18:19 2013 +0530 @@ -69,7 +69,7 @@ return n; } -static PurpleBListNode *purple_blist_get_last_child(PurpleBListNode *node) +PurpleBListNode *purple_blist_get_last_child(PurpleBListNode *node) { if (!node) return NULL; @@ -767,7 +767,7 @@ ops->set_visible(purplebuddylist, show); } -void purple_blist_update_cache(PurpleBuddy *buddy, const char *new_name) +void purple_blist_update_buddies_cache(PurpleBuddy *buddy, const char *new_name) { struct _purple_hbuddy *hb, *hb2; GHashTable *account_buddies; @@ -799,6 +799,16 @@ g_hash_table_replace(account_buddies, hb2, buddy); } +void purple_blist_update_groups_cache(PurpleGroup *group, const char *new_name) +{ + gchar* key = g_utf8_collate_key(purple_group_get_name(group), -1); + g_hash_table_remove(groups_cache, key); + g_free(key); + + key = g_utf8_collate_key(new_name, -1); + g_hash_table_insert(groups_cache, key, group); +} + void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBListNode *node) { PurpleBListNode *cnode = PURPLE_BLIST_NODE(chat);
--- a/libpurple/buddylist.h Tue Jul 09 15:48:17 2013 +0530 +++ b/libpurple/buddylist.h Tue Jul 09 16:18:19 2013 +0530 @@ -188,7 +188,17 @@ * @param buddy The buddy whose name will be changed. * @param name The new name of the buddy. */ -void purple_blist_update_cache(PurpleBuddy *buddy, const char *new_name); +void purple_blist_update_buddies_cache(PurpleBuddy *buddy, const char *new_name); + +/** + * Updates the groups hash table when a group has been renamed. This only + * updates the cache, the caller is responsible for the actual renaming of + * the group after updating the cache. + * + * @param group The group whose name will be changed. + * @param name The new name of the group. + */ +void purple_blist_update_groups_cache(PurpleGroup *group, const char *new_name); /** * Adds a new chat to the buddy list.
--- a/libpurple/plugins/perl/common/BuddyList.xs Tue Jul 09 15:48:17 2013 +0530 +++ b/libpurple/plugins/perl/common/BuddyList.xs Tue Jul 09 16:18:19 2013 +0530 @@ -10,37 +10,6 @@ purple_debug_error("perl", "hv_store failed\n"); } -MODULE = Purple::BuddyList PACKAGE = Purple PREFIX = purple_ -PROTOTYPES: ENABLE - -Purple::BuddyList -purple_blist_get_buddy_list() - -MODULE = Purple::BuddyList PACKAGE = Purple::Find PREFIX = purple_find_ -PROTOTYPES: ENABLE - -Purple::BuddyList::Buddy -purple_blist_find_buddy(account, name) - Purple::Account account - const char * name - -void -purple_blist_find_buddies(account, name) - Purple::Account account - const char * name -PREINIT: - GSList *l, *ll; -PPCODE: - ll = purple_blist_find_buddies(account, name); - for (l = ll; l != NULL; l = l->next) { - XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::BuddyList::Buddy"))); - } - g_slist_free(ll); - -Purple::BuddyList::Group -purple_blist_find_group(name) - const char *name - MODULE = Purple::BuddyList PACKAGE = Purple::Find PREFIX = purple_ PROTOTYPES: ENABLE @@ -72,6 +41,11 @@ purple_contact_invalidate_priority_buddy(contact) Purple::BuddyList::Contact contact +void +purple_contact_merge(source, node) + Purple::BuddyList::Contact source + Purple::BuddyList::Node node + MODULE = Purple::BuddyList PACKAGE = Purple::BuddyList::Group PREFIX = purple_group_ PROTOTYPES: ENABLE @@ -96,6 +70,11 @@ Purple::BuddyList::Group group Purple::Account account +void +purple_group_set_name(group, name) + Purple::BuddyList::Group group + const char * name + const char * purple_group_get_name(group) Purple::BuddyList::Group group @@ -103,6 +82,31 @@ MODULE = Purple::BuddyList PACKAGE = Purple::BuddyList PREFIX = purple_blist_ PROTOTYPES: ENABLE +Purple::BuddyList +purple_blist_get_buddy_list() + +Purple::BuddyList::Buddy +purple_blist_find_buddy(account, name) + Purple::Account account + const char * name + +void +purple_blist_find_buddies(account, name) + Purple::Account account + const char * name +PREINIT: + GSList *l, *ll; +PPCODE: + ll = purple_blist_find_buddies(account, name); + for (l = ll; l != NULL; l = l->next) { + XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::BuddyList::Buddy"))); + } + g_slist_free(ll); + +Purple::BuddyList::Group +purple_blist_find_group(name) + const char *name + void purple_blist_add_contact(contact, group, node) Purple::BuddyList::Contact contact @@ -110,11 +114,6 @@ Purple::BuddyList::Node node void -purple_contact_merge(source, node) - Purple::BuddyList::Contact source - Purple::BuddyList::Node node - -void purple_blist_add_group(group, node) Purple::BuddyList::Group group Purple::BuddyList::Node node @@ -161,36 +160,6 @@ gboolean show void -purple_buddy_update_status(buddy, old_status) - Purple::BuddyList::Buddy buddy - Purple::Status old_status - -void -purple_buddy_set_name(buddy, name) - Purple::BuddyList::Buddy buddy - const char * name - -void -purple_buddy_set_local_alias(buddy, alias) - Purple::BuddyList::Buddy buddy - const char * alias - -void -purple_buddy_set_server_alias(buddy, alias) - Purple::BuddyList::Buddy buddy - const char * alias - -void -purple_chat_set_alias(chat, alias) - Purple::BuddyList::Chat chat - const char * alias - -void -purple_group_set_name(group, name) - Purple::BuddyList::Group group - const char * name - -void purple_blist_add_account(account) Purple::Account account @@ -320,6 +289,11 @@ purple_chat_get_group(chat) Purple::BuddyList::Chat chat +void +purple_chat_set_alias(chat, alias) + Purple::BuddyList::Chat chat + const char * alias + const char * purple_chat_get_name(chat) Purple::BuddyList::Chat chat @@ -374,6 +348,26 @@ const char *name const char *alias +void +purple_buddy_update_status(buddy, old_status) + Purple::BuddyList::Buddy buddy + Purple::Status old_status + +void +purple_buddy_set_name(buddy, name) + Purple::BuddyList::Buddy buddy + const char * name + +void +purple_buddy_set_local_alias(buddy, alias) + Purple::BuddyList::Buddy buddy + const char * alias + +void +purple_buddy_set_server_alias(buddy, alias) + Purple::BuddyList::Buddy buddy + const char * alias + const char * purple_buddy_get_server_alias(buddy) Purple::BuddyList::Buddy buddy