From 482eea4fcf68b9f2bd9f8d6f1db98fe313bef141 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 14 Dec 2015 23:53:35 +0000 Subject: [PATCH] Moved sending of initial presence to sv_ev_roster_received --- src/event/server_events.c | 31 ++++++++++++++++++++++++++ src/xmpp/roster.c | 29 ------------------------ tests/unittests/config/stub_accounts.c | 4 ++++ 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index d5022d35..5b4bed05 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -48,6 +48,7 @@ #include "window_list.h" #include "config/tlscerts.h" #include "profanity.h" +#include "event/client_events.h" #ifdef HAVE_LIBOTR #include "otr/otr.h" @@ -100,6 +101,36 @@ sv_ev_roster_received(void) if (prefs_get_boolean(PREF_ROSTER)) { ui_show_roster(); } + + char *account = jabber_get_account_name(); + + // send initial presence + resource_presence_t conn_presence = accounts_get_login_presence(account); + char *last_activity_str = accounts_get_last_activity(account); + if (last_activity_str) { + GDateTime *nowdt = g_date_time_new_now_utc(); + + GTimeVal lasttv; + gboolean res = g_time_val_from_iso8601(last_activity_str, &lasttv); + if (res) { + GDateTime *lastdt = g_date_time_new_from_timeval_utc(&lasttv); + GTimeSpan diff_micros = g_date_time_difference(nowdt, lastdt); + int diff_secs = (diff_micros / 1000) / 1000; + if (prefs_get_boolean(PREF_LASTACTIVITY)) { + cl_ev_presence_send(conn_presence, NULL, diff_secs); + } else { + cl_ev_presence_send(conn_presence, NULL, 0); + } + g_date_time_unref(lastdt); + } else { + cl_ev_presence_send(conn_presence, NULL, 0); + } + + free(last_activity_str); + g_date_time_unref(nowdt); + } else { + cl_ev_presence_send(conn_presence, NULL, 0); + } } void diff --git a/src/xmpp/roster.c b/src/xmpp/roster.c index 516d291c..8b646efa 100644 --- a/src/xmpp/roster.c +++ b/src/xmpp/roster.c @@ -336,35 +336,6 @@ _roster_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, voi sv_ev_roster_received(); - char *account = jabber_get_account_name(); - resource_presence_t conn_presence = accounts_get_login_presence(account); - - char *last_activity_str = accounts_get_last_activity(account); - if (last_activity_str) { - GDateTime *nowdt = g_date_time_new_now_utc(); - - GTimeVal lasttv; - gboolean res = g_time_val_from_iso8601(last_activity_str, &lasttv); - if (res) { - GDateTime *lastdt = g_date_time_new_from_timeval_utc(&lasttv); - GTimeSpan diff_micros = g_date_time_difference(nowdt, lastdt); - int diff_secs = (diff_micros / 1000) / 1000; - if (prefs_get_boolean(PREF_LASTACTIVITY)) { - cl_ev_presence_send(conn_presence, NULL, diff_secs); - } else { - cl_ev_presence_send(conn_presence, NULL, 0); - } - g_date_time_unref(lastdt); - } else { - cl_ev_presence_send(conn_presence, NULL, 0); - } - - free(last_activity_str); - g_date_time_unref(nowdt); - } else { - cl_ev_presence_send(conn_presence, NULL, 0); - } - return 1; } diff --git a/tests/unittests/config/stub_accounts.c b/tests/unittests/config/stub_accounts.c index 2ea35cb7..51d017be 100644 --- a/tests/unittests/config/stub_accounts.c +++ b/tests/unittests/config/stub_accounts.c @@ -195,3 +195,7 @@ void accounts_clear_otr(const char * const account_name) {} void accounts_clear_pgp_keyid(const char * const account_name) {} void accounts_clear_script_start(const char * const account_name) {} void accounts_add_otr_policy(const char * const account_name, const char * const contact_jid, const char * const policy) {} +char* accounts_get_last_activity(const char *const account_name) +{ + return NULL; +}