From 0fc3343d7538e5f5a3a2b21809219acf36baa3c6 Mon Sep 17 00:00:00 2001 From: Thorben Günther Date: Thu, 11 Mar 2021 22:40:19 +0100 Subject: Restore last status string when connecting --- src/config/accounts.c | 13 +++++++++++-- src/config/accounts.h | 1 + src/event/server_events.c | 8 +++++--- tests/unittests/config/stub_accounts.c | 6 ++++++ 4 files changed, 23 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 #include +#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); } diff --git a/tests/unittests/config/stub_accounts.c b/tests/unittests/config/stub_accounts.c index 19a0bdcb..653b2897 100644 --- a/tests/unittests/config/stub_accounts.c +++ b/tests/unittests/config/stub_accounts.c @@ -213,6 +213,12 @@ accounts_get_last_presence(const char* const account_name) return mock_type(resource_presence_t); } +char* +accounts_get_login_status(const char* const account_name) +{ + return NULL; +} + void accounts_set_priority_online(const char* const account_name, const gint value) { -- cgit 1.4.1-2-gfad0