about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-10-27 22:05:08 +0100
committerJames Booth <boothj5@gmail.com>2012-10-27 22:05:08 +0100
commitc71259c322973b23e808fbcfbcd2613c7b41eb83 (patch)
treeb29d3dd61b6c9df9496256e4014f5442c6ba1971 /src
parent7ba66d7edbb7f028e6c4bdb0f60da9b529b67f98 (diff)
downloadprofani-tty-c71259c322973b23e808fbcfbcd2613c7b41eb83.tar.gz
Unified desktop notification preferences
Diffstat (limited to 'src')
-rw-r--r--src/command.c157
-rw-r--r--src/jabber.c2
-rw-r--r--src/preferences.c42
-rw-r--r--src/preferences.h13
-rw-r--r--src/profanity.c2
-rw-r--r--src/windows.c10
6 files changed, 122 insertions, 104 deletions
diff --git a/src/command.c b/src/command.c
index ab24e46d..422eb4ed 100644
--- a/src/command.c
+++ b/src/command.c
@@ -71,12 +71,10 @@ static gboolean _cmd_tiny(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_close(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_beep(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_notify(const char * const inp, struct cmd_help_t help);
-static gboolean _cmd_set_typing(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_flash(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_showsplash(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_chlog(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_history(const char * const inp, struct cmd_help_t help);
-static gboolean _cmd_set_remind(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_vercheck(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_away(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_online(const char * const inp, struct cmd_help_t help);
@@ -221,40 +219,26 @@ static struct cmd_t setting_commands[] =
 
     { "/notify",
         _cmd_set_notify,
-        { "/notify on|off", "Desktop notifications for new messages.",
-        { "/notify on|off",
-          "--------------",
-          "Switch the message notifications on or off.",
-          "The notification will appear for all incoming messages.",
-          "The desktop environment must support desktop notifications.",
-          "",
-          "Config file section : [ui]",
-          "Config file value :   notify=true|false",
-          NULL } } },
-
-    { "/typing",
-        _cmd_set_typing,
-        { "/typing on|off", "Show when contacts typing.",
-        { "/typing on|off",
-          "--------------",
-          "Switch typing notifications on or off for incoming messages",
-          "If desktop notifications are also enabled you will receive them",
-          "for when users are typing a message to you.",
+        { "/notify type value", "Control various desktop noficiations.",
+        { "/notify type value",
+          "------------------",
+          "Settings for various desktop notifications where type is one of:",
+          "message : Notificaitons for messages.",
+          "        : on|off",
+          "remind  : Notification reminders of unread messages.",
+          "        : where value is the reminder period in seconds,",
+          "        : use 0 to disable.",
+          "typing  : Notifications when contacts are typing.",
+          "        : on|off",
           "",
-          "Config file section : [ui]",
-          "Config file value :   typing=true|false",
-          NULL } } },
-
-    { "/remind",
-        _cmd_set_remind,
-        { "/remind seconds", "Desktop notification reminder of unread messages.",
-        { "/remind seconds",
-          "--------------",
-          "Set the period for new message reminders as desktop notifications.",
-          "The value is in seconds, a setting of 0 will disable the feature.",
-          "The desktop environment must support desktop notifications.",
+          "Example : /notify message on (enable message notifications)",
+          "Example : /notify remind 10  (remind every 10 seconds)",
+          "Example : /notify remind 0   (switch off reminders)",
+          "Example : /notify typing on  (enable typing notifications)",
           "",
-          "Config file section : [ui]",
+          "Config file section : [notifications]",
+          "Config file value :   message=on|off",
+          "Config file value :   typing=on|off",
           "Config file value :   remind=seconds",
           NULL } } },
 
@@ -847,15 +831,76 @@ _cmd_set_beep(const char * const inp, struct cmd_help_t help)
 static gboolean
 _cmd_set_notify(const char * const inp, struct cmd_help_t help)
 {
-    return _cmd_set_boolean_preference(inp, help, "/notify",
-        "Desktop notifications", prefs_set_notify);
-}
+    char *kind = NULL;
+    char *value = NULL;
+
+    // copy input
+    char inp_cpy[strlen(inp) + 1];
+    strcpy(inp_cpy, inp);
+
+    // get kind
+    strtok(inp_cpy, " ");
+    kind = strtok(NULL, " ");
+    if ((kind != NULL) && (strlen(inp) > (8 + strlen(kind) + 1))) {
+        if ((strcmp(kind, "message") != 0) &&
+                (strcmp(kind, "typing") != 0) &&
+                (strcmp(kind, "remind") != 0)) {
+            cons_show("Usage: %s", help.usage);
 
-static gboolean
-_cmd_set_typing(const char * const inp, struct cmd_help_t help)
-{
-    return _cmd_set_boolean_preference(inp, help, "/typing",
-        "Incoming typing notifications", prefs_set_typing);
+            return TRUE;
+        } else {
+            // get value
+            value = strndup(inp+8+strlen(kind)+1, strlen(inp)-(8+strlen(kind)+1));
+
+            if (value != NULL) {
+
+                // set message setting
+                if (strcmp(kind, "message") == 0) {
+                    if (strcmp(inp, "/notify message on") == 0) {
+                        cons_show("Message notifications enabled.");
+                        prefs_set_notify_message(TRUE);
+                    } else if (strcmp(inp, "/notify message off") == 0) {
+                        cons_show("Message notifications disabled.");
+                        prefs_set_notify_message(FALSE);
+                    } else {
+                        cons_show("Usage: /notify message on|off");
+                    }
+
+                // set typing setting
+                } else if (strcmp(kind, "typing") == 0) {
+                    if (strcmp(inp, "/notify typing on") == 0) {
+                        cons_show("Typing notifications enabled.");
+                        prefs_set_notify_typing(TRUE);
+                    } else if (strcmp(inp, "/notify typing off") == 0) {
+                        cons_show("Typing notifications disabled.");
+                        prefs_set_notify_typing(FALSE);
+                    } else {
+                        cons_show("Usage: /notify typing on|off");
+                    }
+
+                } else { // remind
+                    gint period = atoi(value);
+
+                    prefs_set_notify_remind(period);
+                    if (period == 0) {
+                        cons_show("Message reminders disabled.");
+                    } else if (period == 1) {
+                        cons_show("Message reminder period set to 1 second.");
+                    } else {
+                        cons_show("Message reminder period set to %d seconds.", period);
+                    }
+
+                }
+                return TRUE;
+            } else {
+                cons_show("Usage: %s", help.usage);
+                return TRUE;
+            }
+        }
+    } else {
+        cons_show("Usage: %s", help.usage);
+        return TRUE;
+    }
 }
 
 static gboolean
@@ -899,34 +944,6 @@ _cmd_set_history(const char * const inp, struct cmd_help_t help)
 }
 
 static gboolean
-_cmd_set_remind(const char * const inp, struct cmd_help_t help)
-{
-    if ((strncmp(inp, "/remind ", 8) != 0) || (strlen(inp) < 9)) {
-        cons_show("Usage: %s", help.usage);
-    } else {
-        // copy input
-        char inp_cpy[strlen(inp) + 1];
-        strcpy(inp_cpy, inp);
-
-        // get period
-        strtok(inp_cpy, " ");
-        char *period_str = strtok(NULL, " ");
-        gint period = atoi(period_str);
-
-        prefs_set_remind(period);
-        if (period == 0) {
-            cons_show("Message reminders disabled.");
-        } else if (period == 1) {
-            cons_show("Message reminder period set to 1 second.");
-        } else {
-            cons_show("Message reminder period set to %d seconds.", period);
-        }
-    }
-
-    return TRUE;
-}
-
-static gboolean
 _cmd_away(const char * const inp, struct cmd_help_t help)
 {
     _update_presence(PRESENCE_AWAY, "away", inp);
diff --git a/src/jabber.c b/src/jabber.c
index e6436f91..9e1b2461 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -290,7 +290,7 @@ _message_handler(xmpp_conn_t * const conn,
     // if no message, check for chatstates
     if (body == NULL) {
 
-        if (prefs_get_typing()) {
+        if (prefs_get_notify_typing()) {
             if (xmpp_stanza_get_child_by_name(stanza, "active") != NULL) {
                 // active
             } else if (xmpp_stanza_get_child_by_name(stanza, "composing") != NULL) {
diff --git a/src/preferences.c b/src/preferences.c
index 706ad4d3..bc4f67f7 100644
--- a/src/preferences.c
+++ b/src/preferences.c
@@ -236,28 +236,41 @@ prefs_set_beep(gboolean value)
 }
 
 gboolean
-prefs_get_notify(void)
+prefs_get_notify_typing(void)
 {
-    return g_key_file_get_boolean(prefs, "ui", "notify", NULL);
+    return g_key_file_get_boolean(prefs, "notifications", "typing", NULL);
 }
 
 void
-prefs_set_notify(gboolean value)
+prefs_set_notify_typing(gboolean value)
 {
-    g_key_file_set_boolean(prefs, "ui", "notify", value);
+    g_key_file_set_boolean(prefs, "notifications", "typing", value);
     _save_prefs();
 }
 
 gboolean
-prefs_get_typing(void)
+prefs_get_notify_message(void)
 {
-    return g_key_file_get_boolean(prefs, "ui", "typing", NULL);
+    return g_key_file_get_boolean(prefs, "notifications", "message", NULL);
 }
 
 void
-prefs_set_typing(gboolean value)
+prefs_set_notify_message(gboolean value)
 {
-    g_key_file_set_boolean(prefs, "ui", "typing", value);
+    g_key_file_set_boolean(prefs, "notifications", "message", value);
+    _save_prefs();
+}
+
+gint
+prefs_get_notify_remind(void)
+{
+    return g_key_file_get_integer(prefs, "notifications", "remind", NULL);
+}
+
+void
+prefs_set_notify_remind(gint value)
+{
+    g_key_file_set_integer(prefs, "notifications", "remind", value);
     _save_prefs();
 }
 
@@ -313,19 +326,6 @@ prefs_set_history(gboolean value)
     _save_prefs();
 }
 
-gint
-prefs_get_remind(void)
-{
-    return g_key_file_get_integer(prefs, "ui", "remind", NULL);
-}
-
-void
-prefs_set_remind(gint value)
-{
-    g_key_file_set_integer(prefs, "ui", "remind", value);
-    _save_prefs();
-}
-
 void
 prefs_add_login(const char *jid)
 {
diff --git a/src/preferences.h b/src/preferences.h
index 885b895d..223b8b8e 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -44,10 +44,6 @@ void prefs_reset_boolean_choice(void);
 
 gboolean prefs_get_beep(void);
 void prefs_set_beep(gboolean value);
-gboolean prefs_get_notify(void);
-void prefs_set_notify(gboolean value);
-gboolean prefs_get_typing(void);
-void prefs_set_typing(gboolean value);
 gboolean prefs_get_flash(void);
 void prefs_set_flash(gboolean value);
 gboolean prefs_get_chlog(void);
@@ -56,11 +52,16 @@ gboolean prefs_get_history(void);
 void prefs_set_history(gboolean value);
 gboolean prefs_get_showsplash(void);
 void prefs_set_showsplash(gboolean value);
-gint prefs_get_remind(void);
-void prefs_set_remind(gint value);
 gboolean prefs_get_vercheck(void);
 void prefs_set_vercheck(gboolean value);
 
+void prefs_set_notify_message(gboolean value);
+gboolean prefs_get_notify_message(void);
+void prefs_set_notify_typing(gboolean value);
+gboolean prefs_get_notify_typing(void);
+void prefs_set_notify_remind(gint period);
+gint prefs_get_notify_remind(void);
+
 void prefs_add_login(const char *jid);
 
 NCURSES_COLOR_T prefs_get_bkgnd();
diff --git a/src/profanity.c b/src/profanity.c
index 261410ff..71c11be0 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -65,7 +65,7 @@ prof_run(const int disable_tls, char *log_level)
 
             gdouble elapsed = g_timer_elapsed(timer, NULL);
 
-            gint remind_period = prefs_get_remind();
+            gint remind_period = prefs_get_notify_remind();
 
             // 0 means to not remind
             if (remind_period > 0 && elapsed >= remind_period) {
diff --git a/src/windows.c b/src/windows.c
index 957e90f5..dff982ca 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -241,7 +241,7 @@ win_show_typing(const char * const from)
    }
 
 #ifdef HAVE_LIBNOTIFY
-    if (prefs_get_notify())
+    if (prefs_get_notify_typing())
         _win_notify_typing(short_from);
 #endif
 }
@@ -300,7 +300,7 @@ win_show_incomming_msg(const char * const from, const char * const message)
     if (prefs_get_beep())
         beep();
 #ifdef HAVE_LIBNOTIFY
-    if (prefs_get_notify())
+    if (prefs_get_notify_message())
         _win_notify_message(short_from);
 #endif
 }
@@ -518,12 +518,12 @@ cons_prefs(void)
     else
         cons_show("Terminal flash          : OFF");
 
-    if (prefs_get_notify())
+    if (prefs_get_notify_message())
         cons_show("Message notifications   : ON");
     else
         cons_show("Message notifications   : OFF");
 
-    if (prefs_get_typing())
+    if (prefs_get_notify_typing())
         cons_show("Typing notifications    : ON");
     else
         cons_show("Typing notifications    : OFF");
@@ -548,7 +548,7 @@ cons_prefs(void)
     else
         cons_show("Version checking        : OFF");
 
-    gint remind_period = prefs_get_remind();
+    gint remind_period = prefs_get_notify_remind();
     if (remind_period == 0) {
         cons_show("Message reminder period : OFF");
     } else if (remind_period == 1) {