diff options
-rw-r--r-- | src/command/command.c | 47 | ||||
-rw-r--r-- | src/config/preferences.c | 3 | ||||
-rw-r--r-- | src/config/preferences.h | 1 | ||||
-rw-r--r-- | src/profanity.c | 3 | ||||
-rw-r--r-- | src/ui/notifier.c | 9 | ||||
-rw-r--r-- | src/ui/notifier.h | 1 |
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); |