about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorThorben Günther <admin@xenrox.net>2021-03-11 22:40:19 +0100
committerThorben Günther <admin@xenrox.net>2021-07-01 16:08:00 +0200
commit0fc3343d7538e5f5a3a2b21809219acf36baa3c6 (patch)
treec9e3cc0b6daf9d9898ce2c80f4541395227e4ac4 /src
parentaae252e1b54c147bcf9404031e7862c0e955f571 (diff)
downloadprofani-tty-0fc3343d7538e5f5a3a2b21809219acf36baa3c6.tar.gz
Restore last status string when connecting
Diffstat (limited to 'src')
-rw-r--r--src/config/accounts.c13
-rw-r--r--src/config/accounts.h1
-rw-r--r--src/event/server_events.c8
3 files changed, 17 insertions, 5 deletions
diff --git a/src/config/accounts.c b/src/config/accounts.c
index 6c876055..774adc0d 100644
--- a/src/config/accounts.c
+++ b/src/config/accounts.c
@@ -844,8 +844,6 @@ accounts_set_last_status(const char* const account_name, const char* const value
     if (accounts_account_exists(account_name)) {
         if (value) {
             g_key_file_set_string(accounts, account_name, "presence.laststatus", value);
-        } else {
-            g_key_file_remove_key(accounts, account_name, "presence.laststatus", NULL);
         }
         _save_accounts();
     }
@@ -952,6 +950,17 @@ accounts_get_login_presence(const char* const account_name)
     return result;
 }
 
+char*
+accounts_get_login_status(const char* const account_name)
+{
+    gchar* setting = g_key_file_get_string(accounts, account_name, "presence.login", NULL);
+    gchar* status = NULL;
+    if (g_strcmp0(setting, "last") == 0) {
+        status = accounts_get_last_status(account_name);
+    }
+    return status;
+}
+
 static void
 _save_accounts(void)
 {
diff --git a/src/config/accounts.h b/src/config/accounts.h
index 4195a82e..d279bbd0 100644
--- a/src/config/accounts.h
+++ b/src/config/accounts.h
@@ -76,6 +76,7 @@ void accounts_set_login_presence(const char* const account_name, const char* con
 resource_presence_t accounts_get_login_presence(const char* const account_name);
 char* accounts_get_last_status(const char* const account_name);
 resource_presence_t accounts_get_last_presence(const char* const account_name);
+char* accounts_get_login_status(const char* const account_name);
 void accounts_set_priority_online(const char* const account_name, const gint value);
 void accounts_set_priority_chat(const char* const account_name, const gint value);
 void accounts_set_priority_away(const char* const account_name, const gint value);
diff --git a/src/event/server_events.c b/src/event/server_events.c
index c1fe381c..7e5e3d7d 100644
--- a/src/event/server_events.c
+++ b/src/event/server_events.c
@@ -40,6 +40,7 @@
 #include <stdlib.h>
 #include <assert.h>
 
+#include "config/accounts.h"
 #include "profanity.h"
 #include "log.h"
 #include "database.h"
@@ -166,6 +167,7 @@ sv_ev_roster_received(void)
     // send initial presence
     resource_presence_t conn_presence = accounts_get_login_presence(account_name);
     char* last_activity_str = accounts_get_last_activity(account_name);
+    char* status_message = accounts_get_login_status(account_name);
     if (prefs_get_boolean(PREF_LASTACTIVITY) && last_activity_str) {
 
         GTimeVal lasttv;
@@ -177,17 +179,17 @@ sv_ev_roster_received(void)
             GTimeSpan diff_micros = g_date_time_difference(nowdt, lastdt);
             int diff_secs = (diff_micros / 1000) / 1000;
 
-            connection_set_presence_msg(NULL);
+            connection_set_presence_msg(status_message);
             cl_ev_presence_send(conn_presence, diff_secs);
 
             g_date_time_unref(lastdt);
         } else {
-            connection_set_presence_msg(NULL);
+            connection_set_presence_msg(status_message);
             cl_ev_presence_send(conn_presence, 0);
         }
         g_date_time_unref(nowdt);
     } else {
-        connection_set_presence_msg(NULL);
+        connection_set_presence_msg(status_message);
         cl_ev_presence_send(conn_presence, 0);
     }