diff --git a/src/accounts.c b/src/accounts.c index 78b9ab5b..f5d46b82 100644 --- a/src/accounts.c +++ b/src/accounts.c @@ -205,6 +205,12 @@ accounts_get_account(const char * const name) account->login_presence = strdup(presence); } + account->priority_online = g_key_file_get_integer(accounts, name, "priority.online", NULL); + account->priority_chat = g_key_file_get_integer(accounts, name, "priority.chat", NULL); + account->priority_away = g_key_file_get_integer(accounts, name, "priority.away", NULL); + account->priority_xa = g_key_file_get_integer(accounts, name, "priority.xa", NULL); + account->priority_dnd = g_key_file_get_integer(accounts, name, "priority.dnd", NULL); + return account; } } @@ -381,34 +387,48 @@ accounts_set_priority_dnd(const char * const account_name, const gint value) } } -gint -prefs_get_priority_online(const char * const account_name) +void +accounts_set_priority_all(const char * const account_name, const gint value) { - return g_key_file_get_integer(accounts, account_name, "priority.online", NULL); + if (accounts_account_exists(account_name)) { + accounts_set_priority_online(account_name, value); + accounts_set_priority_chat(account_name, value); + accounts_set_priority_away(account_name, value); + accounts_set_priority_xa(account_name, value); + accounts_set_priority_dnd(account_name, value); + _save_accounts(); + } } gint -prefs_get_priority_chat(const char * const account_name) +accounts_get_priority_for_presence_type(const char * const account_name, + jabber_presence_t presence_type) { - return g_key_file_get_integer(accounts, account_name, "priority.chat", NULL); -} + gint result; -gint -prefs_get_priority_away(const char * const account_name) -{ - return g_key_file_get_integer(accounts, account_name, "priority.away", NULL); -} + switch (presence_type) + { + case (PRESENCE_ONLINE): + result = g_key_file_get_integer(accounts, account_name, "priority.online", NULL); + break; + case (PRESENCE_CHAT): + result = g_key_file_get_integer(accounts, account_name, "priority.chat", NULL); + break; + case (PRESENCE_AWAY): + result = g_key_file_get_integer(accounts, account_name, "priority.away", NULL); + break; + case (PRESENCE_XA): + result = g_key_file_get_integer(accounts, account_name, "priority.xa", NULL); + break; + case (PRESENCE_DND): + result = g_key_file_get_integer(accounts, account_name, "priority.dnd", NULL); + break; + default: + result = 0; + break; + } -gint -prefs_get_priority_xa(const char * const account_name) -{ - return g_key_file_get_integer(accounts, account_name, "priority.xa", NULL); -} - -gint -prefs_get_priority_dnd(const char * const account_name) -{ - return g_key_file_get_integer(accounts, account_name, "priority.dnd", NULL); + return result; } void diff --git a/src/accounts.h b/src/accounts.h index 7cb19d10..a9292a02 100644 --- a/src/accounts.h +++ b/src/accounts.h @@ -68,10 +68,8 @@ void accounts_set_priority_chat(const char * const account_name, const gint valu void accounts_set_priority_away(const char * const account_name, const gint value); void accounts_set_priority_xa(const char * const account_name, const gint value); void accounts_set_priority_dnd(const char * const account_name, const gint value); -gint prefs_get_priority_online(const char * const account_name); -gint prefs_get_priority_chat(const char * const account_name); -gint prefs_get_priority_away(const char * const account_name); -gint prefs_get_priority_xa(const char * const account_name); -gint prefs_get_priority_dnd(const char * const account_name); +void accounts_set_priority_all(const char * const account_name, const gint value); +gint accounts_get_priority_for_presence_type(const char * const account_name, + jabber_presence_t presence_type); #endif diff --git a/src/command.c b/src/command.c index c717a3f2..200c89b1 100644 --- a/src/command.c +++ b/src/command.c @@ -558,10 +558,11 @@ static struct cmd_t setting_commands[] = { "/priority", _cmd_set_priority, parse_args, 1, 1, - { "/priority value", "Set priority for connection.", + { "/priority value", "Set priority for the current account.", { "/priority value", "---------------", - "Set priority for the current session.", + "Set priority for the current account, presence will be sent when calling this command.", + "See the /account command for more specific priority settings per presence status.", "value : Number between -128 and 127. Default value is 0.", NULL } } }, @@ -2189,11 +2190,19 @@ _cmd_set_autoaway(gchar **args, struct cmd_help_t help) static gboolean _cmd_set_priority(gchar **args, struct cmd_help_t help) { + jabber_conn_status_t conn_status = jabber_get_connection_status(); + + if (conn_status != JABBER_CONNECTED) { + cons_show("You are not currently connected."); + return TRUE; + } + char *value = args[0]; int intval; if (_strtoi(value, &intval, -128, 127) == 0) { - prefs_set_priority((int)intval); + accounts_set_priority_all(jabber_get_account_name(), intval); + //prefs_set_priority((int)intval); // update presence with new priority presence_update(jabber_get_presence_type(), jabber_get_presence_message(), 0); cons_show("Priority set to %d.", intval); diff --git a/src/ui_windows.c b/src/ui_windows.c index b17536e5..3f584716 100644 --- a/src/ui_windows.c +++ b/src/ui_windows.c @@ -1259,23 +1259,28 @@ cons_show_account(ProfAccount *account) { cons_show("%s account details:", account->name); if (account->enabled) { - cons_show("enabled : TRUE"); + cons_show ("enabled : TRUE"); } else { - cons_show("enabled : FALSE"); + cons_show ("enabled : FALSE"); } - cons_show("jid : %s", account->jid); + cons_show ("jid : %s", account->jid); if (account->resource != NULL) { - cons_show("resource : %s", account->resource); + cons_show ("resource : %s", account->resource); } if (account->server != NULL) { - cons_show("server : %s", account->server); + cons_show ("server : %s", account->server); } if (account->last_presence != NULL) { - cons_show("Last presence : %s", account->last_presence); + cons_show ("Last presence : %s", account->last_presence); } if (account->login_presence != NULL) { - cons_show("Login presence : %s", account->login_presence); + cons_show ("Login presence : %s", account->login_presence); } + cons_show ("Priority (online) : %d", account->priority_online); + cons_show ("Priority (chat) : %d", account->priority_chat); + cons_show ("Priority (away) : %d", account->priority_away); + cons_show ("Priority (xa) : %d", account->priority_xa); + cons_show ("Priority (dnd) : %d", account->priority_dnd); cons_show(""); } @@ -1405,8 +1410,6 @@ cons_show_presence_prefs(void) cons_show("Presence preferences:"); cons_show(""); - cons_show("Priority (/priority) : %d", prefs_get_priority()); - if (strcmp(prefs_get_autoaway_mode(), "off") == 0) { cons_show("Autoaway (/autoaway mode) : OFF"); } else { diff --git a/src/xmpp_presence.c b/src/xmpp_presence.c index 190484ac..745389a6 100644 --- a/src/xmpp_presence.c +++ b/src/xmpp_presence.c @@ -153,7 +153,8 @@ presence_update(jabber_presence_t presence_type, const char * const msg, if (jabber_get_connection_status() != JABBER_CONNECTED) return; - pri = prefs_get_priority(); + pri = accounts_get_priority_for_presence_type(jabber_get_account_name(), + presence_type); if (pri < JABBER_PRIORITY_MIN || pri > JABBER_PRIORITY_MAX) pri = 0;