From 4849ef3474b28835956eea7fcd0392690d4d9706 Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Sun, 18 Dec 2011 14:26:21 +0200 Subject: [PATCH] api: replace gchar *status_id with guint activity Status token strings an no longer passed through the core<->backend API, only SIPE activity values. For the libpurple backend this is a no-op as the mapping tables in the core and the libpurple backend are exactly the same. --- src/api/sipe-backend.h | 12 ++++++------ src/api/sipe-core.h | 4 ++-- src/core/sipe-buddy.c | 7 ++++--- src/core/sipe-notify.c | 22 ++++++++++++++-------- src/core/sipe-ocs2005.c | 3 ++- src/core/sipe-status.c | 18 ++++++++++-------- src/purple/purple-buddy.c | 12 +++++++----- src/purple/purple-plugin.c | 4 ++-- src/purple/purple-private.h | 3 +++ src/purple/purple-status.c | 11 ++++++----- 10 files changed, 56 insertions(+), 40 deletions(-) diff --git a/src/api/sipe-backend.h b/src/api/sipe-backend.h index 0004e984..86c48b9c 100644 --- a/src/api/sipe-backend.h +++ b/src/api/sipe-backend.h @@ -559,9 +559,9 @@ const gchar *sipe_backend_setting(struct sipe_core_public *sipe_public, /** STATUS *******************************************************************/ -const gchar *sipe_backend_status(struct sipe_core_public *sipe_public); +guint sipe_backend_status(struct sipe_core_public *sipe_public); gboolean sipe_backend_status_and_note(struct sipe_core_public *sipe_public, - const gchar *status_id, + guint activity, const gchar *message); /** TRANSPORT ****************************************************************/ @@ -763,10 +763,10 @@ void sipe_backend_buddy_set_string(struct sipe_core_public *sipe_public, * @param sipe_public The handle representing the protocol instance making the call * @param uri SIP URI of the contact * - * @return status token + * @return activity */ -const gchar *sipe_backend_buddy_get_status(struct sipe_core_public *sipe_public, - const gchar *uri); +guint sipe_backend_buddy_get_status(struct sipe_core_public *sipe_public, + const gchar *uri); /** * Sets the alias for a contact. @@ -849,7 +849,7 @@ void sipe_backend_buddy_set_blocked_status(struct sipe_core_public *sipe_public, void sipe_backend_buddy_set_status(struct sipe_core_public *sipe_public, const gchar *who, - const gchar *status_id); + guint activity); /** * Called when a new internal group is about to be added. If this returns FALSE, diff --git a/src/api/sipe-core.h b/src/api/sipe-core.h index 792db62f..a0de1ce5 100644 --- a/src/api/sipe-core.h +++ b/src/api/sipe-core.h @@ -221,7 +221,7 @@ gchar *sipe_core_buddy_status(struct sipe_core_public *sipe_public, void sipe_core_buddy_got_status(struct sipe_core_public *sipe_public, const gchar *uri, - const gchar *status_id); + guint activity); /** * Trigger generation of buddy information label/text pairs @@ -454,7 +454,7 @@ void sipe_core_buddy_menu_free(struct sipe_core_public *sipe_public); /* status */ void sipe_core_status_set(struct sipe_core_public *sipe_public, - const gchar *status_id, + guint activity, const gchar *note); void sipe_core_status_idle(struct sipe_core_public *sipe_public); diff --git a/src/core/sipe-buddy.c b/src/core/sipe-buddy.c index 64f6f144..f41a4d7a 100644 --- a/src/core/sipe-buddy.c +++ b/src/core/sipe-buddy.c @@ -48,6 +48,7 @@ #include "sipe-ocs2007.h" #include "sipe-schedule.h" #include "sipe-session.h" +#include "sipe-status.h" #include "sipe-subscriptions.h" #include "sipe-svc.h" #include "sipe-utils.h" @@ -258,7 +259,7 @@ void sipe_core_buddy_remove(struct sipe_core_public *sipe_public, void sipe_core_buddy_got_status(struct sipe_core_public *sipe_public, const gchar *uri, - const gchar *status_id) + guint activity) { struct sipe_core_private *sipe_private = SIPE_CORE_PRIVATE; struct sipe_buddy *sbuddy = g_hash_table_lookup(sipe_private->buddies, @@ -270,11 +271,11 @@ void sipe_core_buddy_got_status(struct sipe_core_public *sipe_public, * then set/preserve it. */ if (SIPE_CORE_PRIVATE_FLAG_IS(OCS2007)) { - sipe_backend_buddy_set_status(sipe_public, uri, status_id); + sipe_backend_buddy_set_status(sipe_public, uri, activity); } else { sipe_ocs2005_apply_calendar_status(sipe_private, sbuddy, - status_id); + sipe_status_activity_to_token(activity)); } } diff --git a/src/core/sipe-notify.c b/src/core/sipe-notify.c index f7721c03..227ab6bb 100644 --- a/src/core/sipe-notify.c +++ b/src/core/sipe-notify.c @@ -463,7 +463,8 @@ static void process_incoming_notify_msrtc(struct sipe_core_private *sipe_private g_free(activity); SIPE_DEBUG_INFO("process_incoming_notify_msrtc: status(%s)", status_id); - sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, status_id); + sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, + sipe_status_token_to_activity(status_id)); if (!SIPE_CORE_PRIVATE_FLAG_IS(OCS2007) && sipe_strcase_equal(self_uri, uri)) { sipe_ocs2005_user_info_has_updated(sipe_private, xn_userinfo); @@ -778,15 +779,19 @@ static void process_incoming_notify_rlmi(struct sipe_core_private *sipe_private, } if (do_update_status) { - if (!status) { + guint activity; + + if (status) { + SIPE_DEBUG_INFO("process_incoming_notify_rlmi: %s", status); + activity = sipe_status_token_to_activity(status); + } else { /* no status category in this update, using contact's current status */ - status = sipe_backend_buddy_get_status(SIPE_CORE_PUBLIC, - uri); + activity = sipe_backend_buddy_get_status(SIPE_CORE_PUBLIC, + uri); } - SIPE_DEBUG_INFO("process_incoming_notify_rlmi: %s", status); - sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, status); + sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, activity); } sipe_xml_free(xn_categories); @@ -814,10 +819,11 @@ static void sipe_buddy_status_from_activity(struct sipe_core_private *sipe_priva } SIPE_DEBUG_INFO("sipe_buddy_status_from_activity: status_id(%s)", status_id); - sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, status_id); + sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, + sipe_status_token_to_activity(status_id)); } else { sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, - sipe_status_activity_to_token(SIPE_ACTIVITY_OFFLINE)); + SIPE_ACTIVITY_OFFLINE); } } diff --git a/src/core/sipe-ocs2005.c b/src/core/sipe-ocs2005.c index 893e2c05..4e738507 100644 --- a/src/core/sipe-ocs2005.c +++ b/src/core/sipe-ocs2005.c @@ -469,7 +469,8 @@ void sipe_ocs2005_apply_calendar_status(struct sipe_core_private *sipe_private, /* then set status_id actually */ SIPE_DEBUG_INFO("sipe_apply_calendar_status: to %s for %s", status_id, sbuddy->name ? sbuddy->name : "" ); - sipe_backend_buddy_set_status(SIPE_CORE_PUBLIC, sbuddy->name, status_id); + sipe_backend_buddy_set_status(SIPE_CORE_PUBLIC, sbuddy->name, + sipe_status_token_to_activity(status_id)); /* set our account state to the one in roaming (including calendar info) */ self_uri = sip_uri_self(sipe_private); diff --git a/src/core/sipe-status.c b/src/core/sipe-status.c index 0f8b5d6e..cb4e9d30 100644 --- a/src/core/sipe-status.c +++ b/src/core/sipe-status.c @@ -137,17 +137,18 @@ void sipe_core_reset_status(struct sipe_core_public *sipe_public) void sipe_status_and_note(struct sipe_core_private *sipe_private, const gchar *status_id) { + guint activity; + if (!status_id) status_id = sipe_private->status; SIPE_DEBUG_INFO("sipe_status_and_note: switch to '%s' for the account", status_id); + activity = sipe_status_token_to_activity(status_id); if (sipe_backend_status_and_note(SIPE_CORE_PUBLIC, - status_id, + activity, sipe_private->note)) { /* status has changed */ - guint activity = sipe_status_token_to_activity(status_id); - sipe_private->do_not_publish[activity] = time(NULL); SIPE_DEBUG_INFO("sipe_status_and_note: do_not_publish[%s]=%d [now]", status_id, @@ -158,25 +159,26 @@ void sipe_status_and_note(struct sipe_core_private *sipe_private, void sipe_status_update(struct sipe_core_private *sipe_private, SIPE_UNUSED_PARAMETER gpointer unused) { - const gchar *status = sipe_backend_status(SIPE_CORE_PUBLIC); + guint activity = sipe_backend_status(SIPE_CORE_PUBLIC); - if (!status) return; + if (activity == SIPE_ACTIVITY_UNSET) return; - SIPE_DEBUG_INFO("sipe_status_update: status: %s (%s)", status, + SIPE_DEBUG_INFO("sipe_status_update: status: %s (%s)", + sipe_status_activity_to_token(activity), sipe_status_changed_by_user(sipe_private) ? "USER" : "MACHINE"); sipe_cal_presence_publish(sipe_private, FALSE); } void sipe_core_status_set(struct sipe_core_public *sipe_public, - const gchar *status_id, + guint activity, const gchar *note) { struct sipe_core_private *sipe_private = SIPE_CORE_PRIVATE; gchar *action_name; gchar *tmp; time_t now = time(NULL); - guint activity = sipe_status_token_to_activity(status_id); + const gchar *status_id = sipe_status_activity_to_token(activity); gboolean do_not_publish = ((now - sipe_private->do_not_publish[activity]) <= 2); /* when other point of presence clears note, but we are keeping diff --git a/src/purple/purple-buddy.c b/src/purple/purple-buddy.c index 7e448e78..a2dde0ec 100644 --- a/src/purple/purple-buddy.c +++ b/src/purple/purple-buddy.c @@ -139,14 +139,14 @@ gchar* sipe_backend_buddy_get_group_name(SIPE_UNUSED_PARAMETER struct sipe_core_ return g_strdup(purple_buddy_get_group((PurpleBuddy*)who)->name); } -const gchar *sipe_backend_buddy_get_status(struct sipe_core_public *sipe_public, - const gchar *uri) +guint sipe_backend_buddy_get_status(struct sipe_core_public *sipe_public, + const gchar *uri) { struct sipe_backend_private *purple_private = sipe_public->backend_private; PurpleBuddy *pbuddy = purple_find_buddy(purple_private->account, uri); const PurplePresence *presence = purple_buddy_get_presence(pbuddy); const PurpleStatus *pstatus = purple_presence_get_active_status(presence); - return(purple_status_get_id(pstatus)); + return(sipe_purple_token_to_activity(purple_status_get_id(pstatus))); } void sipe_backend_buddy_set_alias(SIPE_UNUSED_PARAMETER struct sipe_core_public *sipe_public, @@ -270,11 +270,13 @@ void sipe_backend_buddy_set_blocked_status(struct sipe_core_public *sipe_public, void sipe_backend_buddy_set_status(struct sipe_core_public *sipe_public, const gchar *who, - const gchar *status_id) + guint activity) { struct sipe_backend_private *purple_private = sipe_public->backend_private; - purple_prpl_got_user_status(purple_private->account, who, status_id, NULL); + purple_prpl_got_user_status(purple_private->account, who, + sipe_purple_activity_to_token(activity), + NULL); } gboolean sipe_backend_buddy_group_add(SIPE_UNUSED_PARAMETER struct sipe_core_public *sipe_public, diff --git a/src/purple/purple-plugin.c b/src/purple/purple-plugin.c index fb217db3..d950e6a3 100644 --- a/src/purple/purple-plugin.c +++ b/src/purple/purple-plugin.c @@ -117,12 +117,12 @@ static void sipe_purple_activity_shutdown(void) g_hash_table_destroy(purple_token_map); } -static const gchar *sipe_purple_activity_to_token(guint type) +const gchar *sipe_purple_activity_to_token(guint type) { return(activity_to_purple_map[type]); } -static guint sipe_purple_token_to_activity(const gchar *token) +guint sipe_purple_token_to_activity(const gchar *token) { return(GPOINTER_TO_UINT(g_hash_table_lookup(purple_token_map, token))); } diff --git a/src/purple/purple-private.h b/src/purple/purple-private.h index 78bd5eb2..bc4d4931 100644 --- a/src/purple/purple-private.h +++ b/src/purple/purple-private.h @@ -52,6 +52,9 @@ struct sipe_backend_fd { /* Status attributes */ #define SIPE_PURPLE_STATUS_ATTR_ID_MESSAGE "message" +const gchar *sipe_purple_activity_to_token(guint type); +guint sipe_purple_token_to_activity(const gchar *token); + /** * Initiates outgoing file transfer, sending @c file to remote peer identified * by @c who. diff --git a/src/purple/purple-status.c b/src/purple/purple-status.c index 6872ba5f..25bffe0c 100644 --- a/src/purple/purple-status.c +++ b/src/purple/purple-status.c @@ -30,12 +30,12 @@ #include "purple-private.h" -const gchar *sipe_backend_status(struct sipe_core_public *sipe_public) +guint sipe_backend_status(struct sipe_core_public *sipe_public) { struct sipe_backend_private *purple_private = sipe_public->backend_private; PurpleStatus *status = purple_account_get_active_status(purple_private->account); - if (!status) return(NULL); - return(purple_status_get_id(status)); + if (!status) return(SIPE_ACTIVITY_UNSET); + return(sipe_purple_token_to_activity(purple_status_get_id(status))); } /** @@ -48,12 +48,13 @@ const gchar *sipe_backend_status(struct sipe_core_public *sipe_public) * calendar data). */ gboolean sipe_backend_status_and_note(struct sipe_core_public *sipe_public, - const gchar *status_id, + guint activity, const gchar *message) { struct sipe_backend_private *purple_private = sipe_public->backend_private; PurpleAccount *account = purple_private->account; PurpleStatus *status = purple_account_get_active_status(account); + const gchar *status_id = sipe_purple_activity_to_token(activity); gboolean changed = TRUE; if (g_str_equal(status_id, purple_status_get_id(status)) && @@ -117,7 +118,7 @@ void sipe_purple_set_status(PurpleAccount *account, const gchar *note = purple_status_get_attr_string(status, SIPE_PURPLE_STATUS_ATTR_ID_MESSAGE); sipe_core_status_set(PURPLE_ACCOUNT_TO_SIPE_CORE_PUBLIC, - status_id, + sipe_purple_token_to_activity(status_id), note); } } -- 2.11.4.GIT