diff --git a/src/config/preferences.c b/src/config/preferences.c index 205d47df..d8ddd159 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -202,17 +202,51 @@ prefs_reset_room_trigger_ac(void) autocomplete_reset(room_trigger_ac); } + + gboolean -prefs_get_notify_chat(gboolean current_win) +prefs_get_notify_chat(gboolean current_win, const char *const message) { gboolean notify_message = prefs_get_boolean(PREF_NOTIFY_MESSAGE); - gboolean notify_window = FALSE; + gboolean notify_trigger = prefs_get_boolean(PREF_NOTIFY_MESSAGE_TRIGGER); + 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); + 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); + } + + gboolean notify_window = FALSE; if (!current_win || (current_win && prefs_get_boolean(PREF_NOTIFY_MESSAGE_CURRENT)) ) { notify_window = TRUE; } - return (notify_message && notify_window); + if (!notify_window) { + return FALSE; + } + + if (notify_message) { + return TRUE; + } + + if (notify_trigger && trigger_found) { + return TRUE; + } + + return FALSE; } gboolean diff --git a/src/config/preferences.h b/src/config/preferences.h index face1811..603ba30c 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -213,7 +213,7 @@ char* prefs_get_string(preference_t pref); void prefs_free_string(char *pref); void prefs_set_string(preference_t pref, char *value); -gboolean prefs_get_notify_chat(gboolean current_win); +gboolean 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); #endif diff --git a/src/ui/chatwin.c b/src/ui/chatwin.c index 2efe82e1..f9bbedde 100644 --- a/src/ui/chatwin.c +++ b/src/ui/chatwin.c @@ -274,18 +274,8 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha beep(); } - if (!prefs_get_boolean(PREF_NOTIFY_MESSAGE)) { - free(display_name); - return; - } - - gboolean notify = FALSE; - gboolean is_current = wins_is_current(window); - if (!is_current || (is_current && prefs_get_boolean(PREF_NOTIFY_MESSAGE_CURRENT)) ) { - notify = TRUE; - } - + gboolean notify = prefs_get_notify_chat(is_current, message); if (!notify) { free(display_name); return;