about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-01-31 22:48:21 +0000
committerJames Booth <boothj5@gmail.com>2013-01-31 22:48:21 +0000
commitb397a8c53e05f6b3fd2cc4a994e7176c354bb5b9 (patch)
tree1f1fe07b10cf284be6e5b958c72c617f9e3ae2d0 /src
parente6596735c4037c1f6dea69badd3fb26b67aebc0f (diff)
downloadprofani-tty-b397a8c53e05f6b3fd2cc4a994e7176c354bb5b9.tar.gz
The /priority command now sets per account/status settings
Diffstat (limited to 'src')
-rw-r--r--src/accounts.c66
-rw-r--r--src/accounts.h8
-rw-r--r--src/command.c15
-rw-r--r--src/ui_windows.c21
-rw-r--r--src/xmpp_presence.c3
5 files changed, 72 insertions, 41 deletions
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)
-{
-    return g_key_file_get_integer(accounts, account_name, "priority.online", NULL);
-}
-
-gint
-prefs_get_priority_chat(const char * const account_name)
-{
-    return g_key_file_get_integer(accounts, account_name, "priority.chat", NULL);
-}
-
-gint
-prefs_get_priority_away(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.away", 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_xa(const char * const account_name)
-{
-    return g_key_file_get_integer(accounts, account_name, "priority.xa", NULL);
-}
+accounts_get_priority_for_presence_type(const char * const account_name,
+    jabber_presence_t presence_type)
+{
+    gint result;
+
+    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_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;