From c7b03699cc9ed6dce74e0bac3a079a00704ef811 Mon Sep 17 00:00:00 2001 From: Jochen De Smet Date: Tue, 14 Jun 2011 08:40:36 -0400 Subject: [PATCH] Depurple sipe_group_buddy Rename to sipe_core_buddy_group and mode it to sipe-buddy.c Add function to sipe-core.h Add trivial purple wrapper in purple-buddy.c Update other existing called in sipe.c --- src/api/core-depurple.h | 2 ++ src/api/sipe-core.h | 6 ++++++ src/core/sipe-buddy.c | 35 +++++++++++++++++++++++++++++++++++ src/core/sipe.c | 38 +------------------------------------- src/purple/purple-buddy.c | 8 ++++++++ src/purple/purple-plugin.c | 2 +- src/purple/purple-private.h | 6 ++++++ 7 files changed, 59 insertions(+), 38 deletions(-) diff --git a/src/api/core-depurple.h b/src/api/core-depurple.h index 7fb8f5dc..e8e7fce3 100644 --- a/src/api/core-depurple.h +++ b/src/api/core-depurple.h @@ -49,3 +49,5 @@ void sipe_remove_group(PurpleConnection *gc, PurpleGroup *group); #define PURPLE_ACCOUNT_TO_SIPE_CORE_PRIVATE ((struct sipe_core_private *)account->gc->proto_data) #define PURPLE_BUDDY_TO_SIPE_CORE_PRIVATE ((struct sipe_core_private *)buddy->account->gc->proto_data) #define PURPLE_GC_TO_SIPE_CORE_PRIVATE ((struct sipe_core_private *)gc->proto_data) +#define PURPLE_GC_TO_SIPE_CORE_PUBLIC ((struct sipe_core_public *) gc->proto_data) + diff --git a/src/api/sipe-core.h b/src/api/sipe-core.h index ac7f0b99..5ca1d884 100644 --- a/src/api/sipe-core.h +++ b/src/api/sipe-core.h @@ -372,6 +372,12 @@ void sipe_core_group_rename(struct sipe_core_public *sipe_public, void sipe_core_group_remove(struct sipe_core_public *sipe_public, const gchar *name); +/* buddies */ +void sipe_core_buddy_group(struct sipe_core_public *sipe_public, + const gchar *who, + const gchar *old_group_name, + const gchar *new_group_name); + #ifdef __cplusplus } #endif diff --git a/src/core/sipe-buddy.c b/src/core/sipe-buddy.c index f9ae5453..7fbfd3f3 100644 --- a/src/core/sipe-buddy.c +++ b/src/core/sipe-buddy.c @@ -29,6 +29,7 @@ #include "sipe-core.h" #include "sipe-core-private.h" #include "sipe-group.h" +#include "sipe-utils.h" gchar *sipe_core_buddy_status(struct sipe_core_public *sipe_public, const gchar *name, @@ -69,6 +70,40 @@ gchar *sipe_buddy_get_alias(struct sipe_core_private *sipe_private, return alias; } +void sipe_core_buddy_group(struct sipe_core_public *sipe_public, + const gchar *who, + const gchar *old_group_name, + const gchar *new_group_name) +{ + struct sipe_buddy * buddy = g_hash_table_lookup(SIPE_CORE_PRIVATE->buddies, who); + struct sipe_group * old_group = NULL; + struct sipe_group * new_group; + + SIPE_DEBUG_INFO("sipe_group_buddy[CB]: who:%s old_group_name:%s new_group_name:%s", + who ? who : "", old_group_name ? old_group_name : "", new_group_name ? new_group_name : ""); + + if(!buddy) { // buddy not in roaming list + return; + } + + if (old_group_name) { + old_group = sipe_group_find_by_name(SIPE_CORE_PRIVATE, old_group_name); + } + new_group = sipe_group_find_by_name(SIPE_CORE_PRIVATE, new_group_name); + + if (old_group) { + buddy->groups = g_slist_remove(buddy->groups, old_group); + SIPE_DEBUG_INFO("buddy %s removed from old group %s", who, old_group_name); + } + + if (!new_group) { + sipe_group_create(SIPE_CORE_PRIVATE, new_group_name, who); + } else { + buddy->groups = slist_insert_unique_sorted(buddy->groups, new_group, (GCompareFunc)sipe_group_compare); + sipe_core_group_set_user(sipe_public, who); + } +} + /* Local Variables: mode: c diff --git a/src/core/sipe.c b/src/core/sipe.c index 7ef4917d..b176ae4b 100644 --- a/src/core/sipe.c +++ b/src/core/sipe.c @@ -859,42 +859,6 @@ sipe_set_idle(PurpleConnection * gc, } } -void -sipe_group_buddy(PurpleConnection *gc, - const char *who, - const char *old_group_name, - const char *new_group_name) -{ - struct sipe_core_private *sipe_private = PURPLE_GC_TO_SIPE_CORE_PRIVATE; - struct sipe_buddy * buddy = g_hash_table_lookup(sipe_private->buddies, who); - struct sipe_group * old_group = NULL; - struct sipe_group * new_group; - - SIPE_DEBUG_INFO("sipe_group_buddy[CB]: who:%s old_group_name:%s new_group_name:%s", - who ? who : "", old_group_name ? old_group_name : "", new_group_name ? new_group_name : ""); - - if(!buddy) { // buddy not in roaming list - return; - } - - if (old_group_name) { - old_group = sipe_group_find_by_name(sipe_private, old_group_name); - } - new_group = sipe_group_find_by_name(sipe_private, new_group_name); - - if (old_group) { - buddy->groups = g_slist_remove(buddy->groups, old_group); - SIPE_DEBUG_INFO("buddy %s removed from old group %s", who, old_group_name); - } - - if (!new_group) { - sipe_group_create(sipe_private, new_group_name, who); - } else { - buddy->groups = slist_insert_unique_sorted(buddy->groups, new_group, (GCompareFunc)sipe_group_compare); - sipe_core_group_set_user(SIPE_CORE_PUBLIC, who); - } -} - void sipe_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { SIPE_DEBUG_INFO("sipe_add_buddy[CB]: buddy:%s group:%s", buddy ? buddy->name : "", group ? group->name : ""); @@ -928,7 +892,7 @@ void sipe_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group SIPE_DEBUG_INFO("sipe_add_buddy: buddy %s already in internal list", buddy->name); } - sipe_group_buddy(gc, buddy->name, NULL, group->name); + sipe_core_buddy_group(PURPLE_GC_TO_SIPE_CORE_PUBLIC, buddy->name, NULL, group->name); } } diff --git a/src/purple/purple-buddy.c b/src/purple/purple-buddy.c index e18960ba..82cb10a4 100644 --- a/src/purple/purple-buddy.c +++ b/src/purple/purple-buddy.c @@ -303,6 +303,14 @@ gboolean sipe_backend_buddy_group_add(SIPE_UNUSED_PARAMETER struct sipe_core_pub return (purple_group != NULL); } +void sipe_purple_group_buddy(PurpleConnection *gc, + const char *who, + const char *old_group_name, + const char *new_group_name) +{ + sipe_core_buddy_group(PURPLE_GC_TO_SIPE_CORE_PUBLIC, who, old_group_name, new_group_name); +} + /* Local Variables: diff --git a/src/purple/purple-plugin.c b/src/purple/purple-plugin.c index f500e293..fa7e7e61 100644 --- a/src/purple/purple-plugin.c +++ b/src/purple/purple-plugin.c @@ -492,7 +492,7 @@ static PurplePluginProtocolInfo sipe_prpl_info = NULL, /* get_cb_info */ // deprecated NULL, /* get_cb_away */ // deprecated sipe_purple_alias_buddy, /* alias_buddy */ - sipe_group_buddy, /* group_buddy */ + sipe_purple_group_buddy, /* group_buddy */ sipe_purple_group_rename, /* rename_group */ NULL, /* buddy_free */ sipe_convo_closed, /* convo_closed */ diff --git a/src/purple/purple-private.h b/src/purple/purple-private.h index b831a357..5f3ba07b 100644 --- a/src/purple/purple-private.h +++ b/src/purple/purple-private.h @@ -91,6 +91,12 @@ void sipe_purple_chat_join(struct _PurpleConnection *gc, GHashTable *data); struct _PurpleRoomlist *sipe_purple_roomlist_get_list(struct _PurpleConnection *gc); void sipe_purple_roomlist_cancel(struct _PurpleRoomlist *list); +/* libpurple buddy callbacks */ +void sipe_purple_group_buddy(struct _PurpleConnection *gc, + const char *who, + const char *old_group_name, + const char *new_group_name); + /* Convenience macros */ #define PURPLE_ACCOUNT_TO_SIPE_CORE_PUBLIC ((struct sipe_core_public *) account->gc->proto_data) #define PURPLE_GC_TO_SIPE_CORE_PUBLIC ((struct sipe_core_public *) gc->proto_data) -- 2.11.4.GIT