From 550f626f5ca53d50c501ecd82c12a5b0d86b6930 Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Sun, 2 Dec 2018 18:13:14 +0200 Subject: [PATCH] buddy: update sipe_core_buddy_got_status() API Add a new time_t parameter that provides an indication to the backend when the buddy has entered the current idle state. This parameter is only valid when the "activity" indicates an idle state. The parameter may be 0 if it is unknown when the buddy entered the idle state or he is not idle. Pass the new parameter down to sipe_backend_buddy_set_status(). --- src/api/sipe-core.h | 12 +++++++++++- src/core/sipe-buddy.c | 8 ++++++-- src/core/sipe-notify.c | 22 ++++++++++++++-------- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/api/sipe-core.h b/src/api/sipe-core.h index 25c580cc..cde0a9cd 100644 --- a/src/api/sipe-core.h +++ b/src/api/sipe-core.h @@ -247,9 +247,19 @@ gchar *sipe_core_buddy_status(struct sipe_core_public *sipe_public, guint activity, const gchar *status_text); +/** + * Received new status for buddy. + * + * @param sipe_public Sipe core public data structure. + * @param uri SIP URI of the buddy + * @param activity Activity value for buddy + * @param last_active Seconds since epoch when buddy entered idle state + * May be @c 0 if unknown or buddy is not idle. + */ void sipe_core_buddy_got_status(struct sipe_core_public *sipe_public, const gchar *uri, - guint activity); + guint activity, + time_t last_active); /** * Trigger generation of buddy information label/text pairs diff --git a/src/core/sipe-buddy.c b/src/core/sipe-buddy.c index ec3eb642..58b75a7c 100644 --- a/src/core/sipe-buddy.c +++ b/src/core/sipe-buddy.c @@ -756,7 +756,8 @@ 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, - guint activity) + guint activity, + time_t last_active) { struct sipe_core_private *sipe_private = SIPE_CORE_PRIVATE; struct sipe_buddy *sbuddy = sipe_buddy_find_by_uri(sipe_private, @@ -768,7 +769,10 @@ 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, activity, 0); + sipe_backend_buddy_set_status(sipe_public, + uri, + activity, + last_active); } else { sipe_ocs2005_apply_calendar_status(sipe_private, sbuddy, diff --git a/src/core/sipe-notify.c b/src/core/sipe-notify.c index 1a80e145..89e720da 100644 --- a/src/core/sipe-notify.c +++ b/src/core/sipe-notify.c @@ -3,7 +3,7 @@ * * pidgin-sipe * - * Copyright (C) 2011-2017 SIPE Project + * Copyright (C) 2011-2018 SIPE Project * * * This program is free software; you can redistribute it and/or modify @@ -577,8 +577,10 @@ 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, - sipe_status_token_to_activity(status_id)); + sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, + uri, + sipe_status_token_to_activity(status_id), + 0); if (!SIPE_CORE_PRIVATE_FLAG_IS(OCS2007) && sipe_strcase_equal(self_uri, uri)) { sipe_ocs2005_user_info_has_updated(sipe_private, xn_userinfo); @@ -947,7 +949,7 @@ static void process_incoming_notify_rlmi(struct sipe_core_private *sipe_private, uri); } - sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, activity); + sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, activity, 0); } sipe_backend_buddy_refresh_properties(SIPE_CORE_PUBLIC, uri); @@ -977,11 +979,15 @@ 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, - sipe_status_token_to_activity(status_id)); + sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, + uri, + sipe_status_token_to_activity(status_id), + 0); } else { - sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, uri, - SIPE_ACTIVITY_OFFLINE); + sipe_core_buddy_got_status(SIPE_CORE_PUBLIC, + uri, + SIPE_ACTIVITY_OFFLINE, + 0); } } -- 2.11.4.GIT