From dc2e0d1d02d6fd7c275b3baca0d2afd6b8ce04c0 Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Sun, 14 Dec 2014 16:25:22 +0200 Subject: [PATCH] Fix #269: purple: idle-away converted to Away (II) Move the idle-away check from sipe_backend_status_and_note() to sipe_backend_status_changed(). Maybe that prevents OCS to think that our machine status is "Away" while the user status is "Available" after the user returns. --- src/purple/purple-status.c | 86 ++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/src/purple/purple-status.c b/src/purple/purple-status.c index 3ce9c98c..57715799 100644 --- a/src/purple/purple-status.c +++ b/src/purple/purple-status.c @@ -42,14 +42,22 @@ gboolean sipe_backend_status_changed(struct sipe_core_public *sipe_public, guint activity, const gchar *message) { - struct sipe_backend_private *purple_private = sipe_public->backend_private; - PurpleStatus *status = purple_account_get_active_status(purple_private->account); - const gchar *status_id = sipe_purple_activity_to_token(activity); + gboolean result = FALSE; - return(!(g_str_equal(status_id, purple_status_get_id(status)) && - sipe_strequal(message, - purple_status_get_attr_string(status, - SIPE_PURPLE_STATUS_ATTR_ID_MESSAGE)))); + if ((activity == SIPE_ACTIVITY_AWAY) && purple_savedstatus_is_idleaway()) { + SIPE_DEBUG_INFO_NOFORMAT("sipe_backend_status_changed: user is already idle-away"); + } else { + struct sipe_backend_private *purple_private = sipe_public->backend_private; + PurpleStatus *status = purple_account_get_active_status(purple_private->account); + const gchar *status_id = sipe_purple_activity_to_token(activity); + + result = !(g_str_equal(status_id, purple_status_get_id(status)) && + sipe_strequal(message, + purple_status_get_attr_string(status, + SIPE_PURPLE_STATUS_ATTR_ID_MESSAGE))); + } + + return(result); } /** @@ -65,43 +73,39 @@ void sipe_backend_status_and_note(struct sipe_core_public *sipe_public, guint activity, const gchar *message) { - if ((activity == SIPE_ACTIVITY_AWAY) && purple_savedstatus_is_idleaway()) { - SIPE_DEBUG_INFO_NOFORMAT("sipe_backend_status_and_notes: user is already idle-away"); - } else { - struct sipe_backend_private *purple_private = sipe_public->backend_private; - PurpleAccount *account = purple_private->account; - const gchar *status_id = sipe_purple_activity_to_token(activity); - PurpleSavedStatus *saved_status; - const PurpleStatusType *acct_status_type = - purple_status_type_find_with_id(purple_account_get_status_types(account), - status_id); - PurpleStatusPrimitive primitive = purple_status_type_get_primitive(acct_status_type); - - saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, message); - if (saved_status) { - purple_savedstatus_set_substatus(saved_status, account, acct_status_type, message); - } + struct sipe_backend_private *purple_private = sipe_public->backend_private; + PurpleAccount *account = purple_private->account; + const gchar *status_id = sipe_purple_activity_to_token(activity); + PurpleSavedStatus *saved_status; + const PurpleStatusType *acct_status_type = + purple_status_type_find_with_id(purple_account_get_status_types(account), + status_id); + PurpleStatusPrimitive primitive = purple_status_type_get_primitive(acct_status_type); + + saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, message); + if (saved_status) { + purple_savedstatus_set_substatus(saved_status, account, acct_status_type, message); + } - /* If this type+message is unique then create a new transient saved status - * Ref: gtkstatusbox.c - */ - if (!saved_status) { - GList *tmp; - GList *active_accts = purple_accounts_get_all_active(); - - saved_status = purple_savedstatus_new(NULL, primitive); - purple_savedstatus_set_message(saved_status, message); - - for (tmp = active_accts; tmp != NULL; tmp = tmp->next) { - purple_savedstatus_set_substatus(saved_status, - (PurpleAccount *)tmp->data, acct_status_type, message); - } - g_list_free(active_accts); - } + /* If this type+message is unique then create a new transient saved status + * Ref: gtkstatusbox.c + */ + if (!saved_status) { + GList *tmp; + GList *active_accts = purple_accounts_get_all_active(); + + saved_status = purple_savedstatus_new(NULL, primitive); + purple_savedstatus_set_message(saved_status, message); - /* Set the status for each account */ - purple_savedstatus_activate(saved_status); + for (tmp = active_accts; tmp != NULL; tmp = tmp->next) { + purple_savedstatus_set_substatus(saved_status, + (PurpleAccount *)tmp->data, acct_status_type, message); + } + g_list_free(active_accts); } + + /* Set the status for each account */ + purple_savedstatus_activate(saved_status); } void sipe_purple_set_status(PurpleAccount *account, -- 2.11.4.GIT