about summary refs log tree commit diff stats
path: root/src/config
diff options
context:
space:
mode:
Diffstat (limited to 'src/config')
-rw-r--r--src/config/preferences.c40
-rw-r--r--src/config/preferences.h2
2 files changed, 38 insertions, 4 deletions
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