about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/command.c47
-rw-r--r--src/config/preferences.c3
-rw-r--r--src/config/preferences.h1
-rw-r--r--src/profanity.c3
-rw-r--r--src/ui/notifier.c9
-rw-r--r--src/ui/notifier.h1
6 files changed, 63 insertions, 1 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 46e56d4a..6e1b97d0 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -522,6 +522,9 @@ static struct cmd_t setting_commands[] =
           "invite  : Notifications for chat room invites.",
           "        : on|off",
           "",
+          "sub     : Notifications for subscription requests.",
+          "        : on|off",
+          "",
           "Example : /notify message on (enable message notifications)",
           "Example : /notify remind 10  (remind every 10 seconds)",
           "Example : /notify remind 0   (switch off reminders)",
@@ -807,6 +810,7 @@ cmd_init(void)
     autocomplete_add(notify_ac, strdup("typing"));
     autocomplete_add(notify_ac, strdup("remind"));
     autocomplete_add(notify_ac, strdup("invite"));
+    autocomplete_add(notify_ac, strdup("sub"));
     autocomplete_add(notify_ac, strdup("status"));
 
     sub_ac = autocomplete_new();
@@ -2513,7 +2517,8 @@ _cmd_set_notify(gchar **args, struct cmd_help_t help)
 
     // bad kind
     if ((strcmp(kind, "message") != 0) && (strcmp(kind, "typing") != 0) &&
-            (strcmp(kind, "remind") != 0) && (strcmp(kind, "invite") != 0)) {
+            (strcmp(kind, "remind") != 0) && (strcmp(kind, "invite") != 0) &&
+            (strcmp(kind, "sub") != 0)) {
         cons_show("Usage: %s", help.usage);
 
     // set message setting
@@ -2552,6 +2557,18 @@ _cmd_set_notify(gchar **args, struct cmd_help_t help)
             cons_show("Usage: /notify invite on|off");
         }
 
+    // set subscription setting
+    } else if (strcmp(kind, "sub") == 0) {
+        if (strcmp(value, "on") == 0) {
+            cons_show("Subscription notifications enabled.");
+            prefs_set_boolean(PREF_NOTIFY_SUB, TRUE);
+        } else if (strcmp(value, "off") == 0) {
+            cons_show("Subscription notifications disabled.");
+            prefs_set_boolean(PREF_NOTIFY_SUB, FALSE);
+        } else {
+            cons_show("Usage: /notify sub on|off");
+        }
+
     // set remind setting
     } else if (strcmp(kind, "remind") == 0) {
         gint period = atoi(value);
@@ -3008,6 +3025,34 @@ _notify_autocomplete(char *input, int *size)
             free(auto_msg);
             free(found);
         }
+    } else if ((strncmp(input, "/notify invite ", 15) == 0) && (*size > 15)) {
+        for(i = 15; i < *size; i++) {
+            inp_cpy[i-15] = input[i];
+        }
+        inp_cpy[(*size) - 15] = '\0';
+        found = prefs_autocomplete_boolean_choice(inp_cpy);
+        if (found != NULL) {
+            auto_msg = (char *) malloc((15 + (strlen(found) + 1)) * sizeof(char));
+            strcpy(auto_msg, "/notify invite ");
+            strcat(auto_msg, found);
+            inp_replace_input(input, auto_msg, size);
+            free(auto_msg);
+            free(found);
+        }
+    } else if ((strncmp(input, "/notify sub ", 12) == 0) && (*size > 12)) {
+        for(i = 12; i < *size; i++) {
+            inp_cpy[i-12] = input[i];
+        }
+        inp_cpy[(*size) - 12] = '\0';
+        found = prefs_autocomplete_boolean_choice(inp_cpy);
+        if (found != NULL) {
+            auto_msg = (char *) malloc((12 + (strlen(found) + 1)) * sizeof(char));
+            strcpy(auto_msg, "/notify sub ");
+            strcat(auto_msg, found);
+            inp_replace_input(input, auto_msg, size);
+            free(auto_msg);
+            free(found);
+        }
     } else if ((strncmp(input, "/notify ", 8) == 0) && (*size > 8)) {
         _parameter_autocomplete_with_ac(input, size, "/notify", notify_ac);
     }
diff --git a/src/config/preferences.c b/src/config/preferences.c
index d6d37234..1286961c 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -300,6 +300,7 @@ _get_group(preference_t pref)
         case PREF_NOTIFY_TYPING:
         case PREF_NOTIFY_MESSAGE:
         case PREF_NOTIFY_INVITE:
+        case PREF_NOTIFY_SUB:
             return "notifications";
         case PREF_CHLOG:
             return "logging";
@@ -347,6 +348,8 @@ _get_key(preference_t pref)
             return "message";
         case PREF_NOTIFY_INVITE:
             return "invite";
+        case PREF_NOTIFY_SUB:
+            return "sub";
         case PREF_CHLOG:
             return "chlog";
         case PREF_AUTOAWAY_CHECK:
diff --git a/src/config/preferences.h b/src/config/preferences.h
index bdfe7a95..3f4f0b79 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -51,6 +51,7 @@ typedef enum {
     PREF_NOTIFY_TYPING,
     PREF_NOTIFY_MESSAGE,
     PREF_NOTIFY_INVITE,
+    PREF_NOTIFY_SUB,
     PREF_CHLOG,
     PREF_AUTOAWAY_CHECK,
     PREF_AUTOAWAY_MODE,
diff --git a/src/profanity.c b/src/profanity.c
index 9b4e4ad7..ad646b85 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -169,6 +169,9 @@ prof_handle_subscription(const char *from, jabber_subscr_t type)
         log_info("Received authorization request from %s", from);
         ui_print_system_msg_from_recipient(from, "Authorization request, type '/sub allow' to accept or '/sub deny' to reject");
         ui_current_page_off();
+        if (prefs_get_boolean(PREF_NOTIFY_SUB)) {
+            notify_subscription(from);
+        }
         break;
     case PRESENCE_SUBSCRIBED:
         cons_show("Subscription received from %s", from);
diff --git a/src/ui/notifier.c b/src/ui/notifier.c
index 54951fde..e3716e3d 100644
--- a/src/ui/notifier.c
+++ b/src/ui/notifier.c
@@ -93,6 +93,15 @@ notify_message(const char * const short_from)
 }
 
 void
+notify_subscription(const char * const from)
+{
+    GString *message = g_string_new("Subscription request: \n");
+    g_string_append(message, from);
+    _notify(message->str, 10000, "Incomming message");
+    g_string_free(message, FALSE);
+}
+
+void
 notify_remind(void)
 {
     gint unread = ui_unread();
diff --git a/src/ui/notifier.h b/src/ui/notifier.h
index 8565f771..a8c2250f 100644
--- a/src/ui/notifier.h
+++ b/src/ui/notifier.h
@@ -28,3 +28,4 @@ void notify_message(const char * const short_from);
 void notify_remind(void);
 void notify_invite(const char * const from, const char * const room,
     const char * const reason);
+void notify_subscription(const char * const from);