about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/commands.c1
-rw-r--r--src/config/accounts.c17
-rw-r--r--src/config/accounts.h1
-rw-r--r--src/xmpp/connection.c1
-rw-r--r--tests/unittests/config/stub_accounts.c1
-rw-r--r--tests/unittests/test_cmd_disconnect.c1
6 files changed, 22 insertions, 0 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index 3f695cc1..5ddfa07e 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -777,6 +777,7 @@ cmd_disconnect(ProfWin *window, const char * const command, gchar **args)
     if (jabber_get_connection_status() == JABBER_CONNECTED) {
         char *jid = strdup(jabber_get_fulljid());
         cons_show("%s logged out successfully.", jid);
+        accounts_set_last_activity(jabber_get_account_name());
         jabber_disconnect();
         roster_clear();
         muc_invites_clear();
diff --git a/src/config/accounts.c b/src/config/accounts.c
index a827392b..d43cc3a3 100644
--- a/src/config/accounts.c
+++ b/src/config/accounts.c
@@ -762,6 +762,23 @@ accounts_set_last_presence(const char * const account_name, const char * const v
 }
 
 void
+accounts_set_last_activity(const char * const account_name)
+{
+    if (accounts_account_exists(account_name)) {
+        GDateTime *nowdt = g_date_time_new_now_utc();
+        GTimeVal nowtv;
+        gboolean res = g_date_time_to_timeval(nowdt, &nowtv);
+        g_date_time_unref(nowdt);
+
+        if (res) {
+            char *timestr = g_time_val_to_iso8601(&nowtv);
+            g_key_file_set_string(accounts, account_name, "last.activity", timestr);
+            _save_accounts();
+        }
+    }
+}
+
+void
 accounts_set_login_presence(const char * const account_name, const char * const value)
 {
     if (accounts_account_exists(account_name)) {
diff --git a/src/config/accounts.h b/src/config/accounts.h
index eb981cb8..65106365 100644
--- a/src/config/accounts.h
+++ b/src/config/accounts.h
@@ -66,6 +66,7 @@ void accounts_set_muc_service(const char * const account_name, const char * cons
 void accounts_set_muc_nick(const char * const account_name, const char * const value);
 void accounts_set_otr_policy(const char * const account_name, const char * const value);
 void accounts_set_last_presence(const char * const account_name, const char * const value);
+void accounts_set_last_activity(const char * const account_name);
 void accounts_set_login_presence(const char * const account_name, const char * const value);
 resource_presence_t accounts_get_login_presence(const char * const account_name);
 resource_presence_t accounts_get_last_presence(const char * const account_name);
diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c
index 768a4476..abc08732 100644
--- a/src/xmpp/connection.c
+++ b/src/xmpp/connection.c
@@ -200,6 +200,7 @@ jabber_disconnect(void)
     // if connected, send end stream and wait for response
     if (jabber_conn.conn_status == JABBER_CONNECTED) {
         log_info("Closing connection");
+        accounts_set_last_activity(jabber_get_account_name());
         jabber_conn.conn_status = JABBER_DISCONNECTING;
         xmpp_disconnect(jabber_conn.conn);
 
diff --git a/tests/unittests/config/stub_accounts.c b/tests/unittests/config/stub_accounts.c
index c046be86..89b6dfc2 100644
--- a/tests/unittests/config/stub_accounts.c
+++ b/tests/unittests/config/stub_accounts.c
@@ -122,6 +122,7 @@ void accounts_set_otr_policy(const char * const account_name, const char * const
 }
 
 void accounts_set_last_presence(const char * const account_name, const char * const value) {}
+void accounts_set_last_activity(const char * const account_name) {}
 void accounts_set_pgp_keyid(const char * const account_name, const char * const value) {}
 
 void accounts_set_login_presence(const char * const account_name, const char * const value)
diff --git a/tests/unittests/test_cmd_disconnect.c b/tests/unittests/test_cmd_disconnect.c
index 7ea5b53a..c6c9f611 100644
--- a/tests/unittests/test_cmd_disconnect.c
+++ b/tests/unittests/test_cmd_disconnect.c
@@ -22,6 +22,7 @@ void clears_chat_sessions(void **state)
     chat_session_recipient_active("mike@server.org", "work", FALSE);
 
     will_return(jabber_get_connection_status, JABBER_CONNECTED);
+    will_return(jabber_get_account_name, "someaccount");
     will_return(jabber_get_fulljid, "myjid@myserver.com");
     expect_any_cons_show();