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

Implemented regular chat notify triggers

This commit is contained in:
James Booth 2015-11-25 01:42:27 +00:00
parent 01682a7594
commit b9794361f7
3 changed files with 39 additions and 15 deletions

View File

@ -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

View File

@ -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

View File

@ -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;