1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Finished basic /notify triggers

This commit is contained in:
James Booth 2015-11-25 21:24:21 +00:00
parent b9794361f7
commit 20e63e364b
5 changed files with 134 additions and 72 deletions

View File

@ -1067,7 +1067,8 @@ static struct cmd_t command_defs[] =
"/notify message trigger remove <text>",
"/notify message trigger list",
"/notify message trigger on|off",
"/notify room on|off|mention",
"/notify room on|off",
"/notify room mention on|off",
"/notify room current on|off",
"/notify room text on|off",
"/notify room trigger add <text>",
@ -1089,7 +1090,8 @@ static struct cmd_t command_defs[] =
{ "message trigger remove <text>", "Remove regular chat notification for specified text." },
{ "message trigger list", "List all regular chat custom text notifications." },
{ "message trigger on|off", "Enable or disable all regular chat custom text notifications." },
{ "room on|off|mention", "Notifications for chat room messages, mention triggers notifications only when your nick is mentioned." },
{ "room on|off", "Notifications for chat room messages, mention triggers notifications only when your nick is mentioned." },
{ "room mention on|off", "Notifications for chat room messages when your nick is mentioned." },
{ "room current on|off", "Whether chat room messages in the current window trigger notifications." },
{ "room text on|off", "Show message text in chat room message notifications." },
{ "room trigger add <text>", "Notify when specified text included in regular chat message." },
@ -1104,7 +1106,7 @@ static struct cmd_t command_defs[] =
CMD_EXAMPLES(
"/notify message on",
"/notify message text on",
"/notify room mention",
"/notify room mention on",
"/notify room current off",
"/notify room text off",
"/notify remind 10",
@ -3206,6 +3208,11 @@ _notify_autocomplete(ProfWin *window, const char *const input)
return result;
}
result = autocomplete_param_with_func(input, "/notify room mention", prefs_autocomplete_boolean_choice);
if (result) {
return result;
}
result = autocomplete_param_with_func(input, "/notify message text", prefs_autocomplete_boolean_choice);
if (result) {
return result;

View File

@ -4354,14 +4354,21 @@ cmd_notify(ProfWin *window, const char *const command, gchar **args)
// set room setting
} else if (strcmp(kind, "room") == 0) {
if (strcmp(args[1], "on") == 0) {
cons_show("Chat room notifications enabled.");
prefs_set_string(PREF_NOTIFY_ROOM, "on");
cons_show("Room notifications enabled.");
prefs_set_boolean(PREF_NOTIFY_ROOM, TRUE);
} else if (strcmp(args[1], "off") == 0) {
cons_show("Chat room notifications disabled.");
prefs_set_string(PREF_NOTIFY_ROOM, "off");
cons_show("Room notifications disabled.");
prefs_set_boolean(PREF_NOTIFY_ROOM, FALSE);
} else if (strcmp(args[1], "mention") == 0) {
cons_show("Chat room notifications enabled on mention.");
prefs_set_string(PREF_NOTIFY_ROOM, "mention");
if (strcmp(args[2], "on") == 0) {
cons_show("Room notifications with mention enabled.");
prefs_set_boolean(PREF_NOTIFY_ROOM_MENTION, TRUE);
} else if (strcmp(args[2], "off") == 0) {
cons_show("Room notifications with mention disabled.");
prefs_set_boolean(PREF_NOTIFY_ROOM_MENTION, FALSE);
} else {
cons_show("Usage: /notify room mention on|off");
}
} else if (strcmp(args[1], "current") == 0) {
if (g_strcmp0(args[2], "on") == 0) {
cons_show("Current window chat room message notifications enabled.");

View File

@ -130,6 +130,19 @@ prefs_load(void)
prefs_free_string(time);
}
// move pre 0.4.8 notify settings
if (g_key_file_has_key(prefs, PREF_GROUP_NOTIFICATIONS, "room", NULL)) {
char *value = g_key_file_get_string(prefs, PREF_GROUP_NOTIFICATIONS, "room", NULL);
if (g_strcmp0(value, "on") == 0) {
g_key_file_set_boolean(prefs, PREF_GROUP_NOTIFICATIONS, "room", TRUE);
} else if (g_strcmp0(value, "off") == 0) {
g_key_file_set_boolean(prefs, PREF_GROUP_NOTIFICATIONS, "room", FALSE);
} else if (g_strcmp0(value, "mention") == 0) {
g_key_file_set_boolean(prefs, PREF_GROUP_NOTIFICATIONS, "room", FALSE);
g_key_file_set_boolean(prefs, PREF_GROUP_NOTIFICATIONS, "room.mention", TRUE);
}
}
_save_prefs();
boolean_choice_ac = autocomplete_new();
@ -207,11 +220,26 @@ prefs_reset_room_trigger_ac(void)
gboolean
prefs_get_notify_chat(gboolean current_win, const char *const message)
{
gboolean notify_current = prefs_get_boolean(PREF_NOTIFY_MESSAGE_CURRENT);
gboolean notify_window = FALSE;
if (!current_win || (current_win && notify_current) ) {
notify_window = TRUE;
}
if (!notify_window) {
return FALSE;
}
gboolean notify_message = prefs_get_boolean(PREF_NOTIFY_MESSAGE);
if (notify_message) {
return TRUE;
}
gboolean notify_trigger = prefs_get_boolean(PREF_NOTIFY_MESSAGE_TRIGGER);
if (!notify_trigger) {
return FALSE;
}
gboolean trigger_found = FALSE;
if (notify_trigger) {
char *message_lower = g_utf8_strdown(message, -1);
gsize len = 0;
gchar **triggers = g_key_file_get_string_list(prefs, PREF_GROUP_NOTIFICATIONS, "message.trigger.list", &len, NULL);
@ -227,22 +255,8 @@ prefs_get_notify_chat(gboolean current_win, const char *const message)
}
g_strfreev(triggers);
g_free(message_lower);
}
gboolean notify_window = FALSE;
if (!current_win || (current_win && prefs_get_boolean(PREF_NOTIFY_MESSAGE_CURRENT)) ) {
notify_window = TRUE;
}
if (!notify_window) {
return FALSE;
}
if (notify_message) {
return TRUE;
}
if (notify_trigger && trigger_found) {
if (trigger_found) {
return TRUE;
}
@ -252,29 +266,60 @@ prefs_get_notify_chat(gboolean current_win, const char *const message)
gboolean
prefs_get_notify_room(gboolean current_win, const char *const nick, const char *const message)
{
gboolean notify_message = FALSE;
gboolean notify_current = prefs_get_boolean(PREF_NOTIFY_ROOM_CURRENT);
gboolean notify_window = FALSE;
char *room_setting = prefs_get_string(PREF_NOTIFY_ROOM);
if (g_strcmp0(room_setting, "on") == 0) {
notify_message = TRUE;
if (!current_win || (current_win && notify_current) ) {
notify_window = TRUE;
}
if (g_strcmp0(room_setting, "mention") == 0) {
if (!notify_window) {
return FALSE;
}
gboolean notify_room = prefs_get_boolean(PREF_NOTIFY_ROOM);
if (notify_room) {
return TRUE;
}
gboolean notify_mention = prefs_get_boolean(PREF_NOTIFY_ROOM_MENTION);
if (notify_mention) {
char *message_lower = g_utf8_strdown(message, -1);
char *nick_lower = g_utf8_strdown(nick, -1);
if (g_strrstr(message_lower, nick_lower)) {
notify_message = TRUE;
g_free(message_lower);
g_free(nick_lower);
return TRUE;
}
g_free(message_lower);
g_free(nick_lower);
}
prefs_free_string(room_setting);
if (!current_win || (current_win && prefs_get_boolean(PREF_NOTIFY_ROOM_CURRENT)) ) {
notify_window = TRUE;
gboolean notify_trigger = prefs_get_boolean(PREF_NOTIFY_ROOM_TRIGGER);
if (!notify_trigger) {
return FALSE;
}
return (notify_message && notify_window);
gboolean trigger_found = FALSE;
char *message_lower = g_utf8_strdown(message, -1);
gsize len = 0;
gchar **triggers = g_key_file_get_string_list(prefs, PREF_GROUP_NOTIFICATIONS, "room.trigger.list", &len, NULL);
int i;
for (i = 0; i < len; i++) {
char *trigger_lower = g_utf8_strdown(triggers[i], -1);
if (g_strrstr(message_lower, trigger_lower)) {
trigger_found = TRUE;
g_free(trigger_lower);
break;
}
g_free(trigger_lower);
}
g_strfreev(triggers);
g_free(message_lower);
if (trigger_found) {
return TRUE;
}
return FALSE;
}
gboolean
@ -989,13 +1034,14 @@ _get_group(preference_t pref)
case PREF_NOTIFY_TYPING:
case PREF_NOTIFY_TYPING_CURRENT:
case PREF_NOTIFY_MESSAGE:
case PREF_NOTIFY_MESSAGE_TRIGGER:
case PREF_NOTIFY_MESSAGE_CURRENT:
case PREF_NOTIFY_MESSAGE_TEXT:
case PREF_NOTIFY_MESSAGE_TRIGGER:
case PREF_NOTIFY_ROOM:
case PREF_NOTIFY_ROOM_MENTION:
case PREF_NOTIFY_ROOM_TRIGGER:
case PREF_NOTIFY_ROOM_CURRENT:
case PREF_NOTIFY_ROOM_TEXT:
case PREF_NOTIFY_ROOM_TRIGGER:
case PREF_NOTIFY_INVITE:
case PREF_NOTIFY_SUB:
return PREF_GROUP_NOTIFICATIONS;
@ -1082,20 +1128,22 @@ _get_key(preference_t pref)
return "typing.current";
case PREF_NOTIFY_MESSAGE:
return "message";
case PREF_NOTIFY_MESSAGE_TRIGGER:
return "message.trigger";
case PREF_NOTIFY_MESSAGE_CURRENT:
return "message.current";
case PREF_NOTIFY_MESSAGE_TEXT:
return "message.text";
case PREF_NOTIFY_MESSAGE_TRIGGER:
return "message.trigger";
case PREF_NOTIFY_ROOM:
return "room";
case PREF_NOTIFY_ROOM_TRIGGER:
return "room.trigger";
case PREF_NOTIFY_ROOM_MENTION:
return "room.mention";
case PREF_NOTIFY_ROOM_CURRENT:
return "room.current";
case PREF_NOTIFY_ROOM_TEXT:
return "room.text";
case PREF_NOTIFY_ROOM_TRIGGER:
return "room.trigger";
case PREF_NOTIFY_INVITE:
return "invite";
case PREF_NOTIFY_SUB:
@ -1204,6 +1252,7 @@ _get_default_boolean(preference_t pref)
case PREF_LOG_SHARED:
case PREF_NOTIFY_MESSAGE:
case PREF_NOTIFY_MESSAGE_CURRENT:
case PREF_NOTIFY_ROOM:
case PREF_NOTIFY_ROOM_CURRENT:
case PREF_NOTIFY_TYPING:
case PREF_NOTIFY_TYPING_CURRENT:
@ -1241,8 +1290,6 @@ _get_default_string(preference_t pref)
{
case PREF_AUTOAWAY_MODE:
return "off";
case PREF_NOTIFY_ROOM:
return "on";
case PREF_OTR_LOG:
return "redact";
case PREF_OTR_POLICY:

View File

@ -94,13 +94,14 @@ typedef enum {
PREF_NOTIFY_TYPING,
PREF_NOTIFY_TYPING_CURRENT,
PREF_NOTIFY_MESSAGE,
PREF_NOTIFY_MESSAGE_TRIGGER,
PREF_NOTIFY_MESSAGE_CURRENT,
PREF_NOTIFY_MESSAGE_TEXT,
PREF_NOTIFY_MESSAGE_TRIGGER,
PREF_NOTIFY_ROOM,
PREF_NOTIFY_ROOM_MENTION,
PREF_NOTIFY_ROOM_TRIGGER,
PREF_NOTIFY_ROOM_CURRENT,
PREF_NOTIFY_ROOM_TEXT,
PREF_NOTIFY_ROOM_TRIGGER,
PREF_NOTIFY_INVITE,
PREF_NOTIFY_SUB,
PREF_CHLOG,

View File

@ -1329,6 +1329,11 @@ cons_notify_setting(void)
else
cons_show("Messages (/notify message) : OFF");
if (prefs_get_boolean(PREF_NOTIFY_MESSAGE_TRIGGER))
cons_show("Messages trigger (/notify message) : ON");
else
cons_show("Messages trigger (/notify message) : OFF");
if (prefs_get_boolean(PREF_NOTIFY_MESSAGE_CURRENT))
cons_show("Messages current (/notify message) : ON");
else
@ -1339,20 +1344,20 @@ cons_notify_setting(void)
else
cons_show("Messages text (/notify message) : OFF");
if (prefs_get_boolean(PREF_NOTIFY_MESSAGE_TRIGGER))
cons_show("Messages trigger (/notify message) : ON");
else
cons_show("Messages trigger (/notify message) : OFF");
char *room_setting = prefs_get_string(PREF_NOTIFY_ROOM);
if (g_strcmp0(room_setting, "on") == 0) {
if (prefs_get_boolean(PREF_NOTIFY_ROOM))
cons_show("Room messages (/notify room) : ON");
} else if (g_strcmp0(room_setting, "off") == 0) {
else
cons_show("Room messages (/notify room) : OFF");
} else {
cons_show ("Room messages (/notify room) : %s", room_setting);
}
prefs_free_string(room_setting);
if (prefs_get_boolean(PREF_NOTIFY_ROOM_MENTION))
cons_show("Room mention (/notify room) : ON");
else
cons_show("Room mention (/notify room) : OFF");
if (prefs_get_boolean(PREF_NOTIFY_ROOM_TRIGGER))
cons_show("Room trigger (/notify room) : ON");
else
cons_show("Room trigger (/notify room) : OFF");
if (prefs_get_boolean(PREF_NOTIFY_ROOM_CURRENT))
cons_show("Room current (/notify room) : ON");
@ -1364,11 +1369,6 @@ cons_notify_setting(void)
else
cons_show("Room text (/notify room) : OFF");
if (prefs_get_boolean(PREF_NOTIFY_ROOM_TRIGGER))
cons_show("Room trigger (/notify room) : ON");
else
cons_show("Room trigger (/notify room) : OFF");
if (prefs_get_boolean(PREF_NOTIFY_TYPING))
cons_show("Composing (/notify typing) : ON");
else