about summary refs log tree commit diff stats
path: root/src/ui/mucwin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/mucwin.c')
-rw-r--r--src/ui/mucwin.c49
1 files changed, 34 insertions, 15 deletions
diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c
index f1370c88..2005ce28 100644
--- a/src/ui/mucwin.c
+++ b/src/ui/mucwin.c
@@ -361,28 +361,47 @@ mucwin_nick_change(ProfMucWin *mucwin, const char *const nick)
 }
 
 void
-mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp, const char *const message)
+mucwin_history(ProfMucWin *mucwin, const ProfMessage *const message)
 {
     assert(mucwin != NULL);
 
     ProfWin *window = (ProfWin*)mucwin;
-    GString *line = g_string_new("");
+    char *nick = message->jid->resourcepart;
 
-    if (strncmp(message, "/me ", 4) == 0) {
-        g_string_append(line, "*");
-        g_string_append(line, nick);
-        g_string_append(line, " ");
-        g_string_append(line, message + 4);
+    // 'unanimous' all in one color (like always was)
+    // 'regular' colored like new messages too
+    char *muc_history_color = prefs_get_string(PREF_HISTORY_COLOR_MUC);
+
+    if (g_strcmp0(muc_history_color, "unanimous") == 0) {
+        GString *line = g_string_new("");
+
+        if (strncmp(message->plain, "/me ", 4) == 0) {
+            g_string_append(line, "*");
+            g_string_append(line, nick);
+            g_string_append(line, " ");
+            g_string_append(line, message->plain + 4);
+        } else {
+            g_string_append(line, nick);
+            g_string_append(line, ": ");
+            g_string_append(line, message->plain);
+        }
+
+        win_print_history(window, message->timestamp, line->str);
+
+        g_string_free(line, TRUE);
     } else {
-        g_string_append(line, nick);
-        g_string_append(line, ": ");
-        g_string_append(line, message);
-    }
+        char *mynick = muc_nick(mucwin->roomjid);
+        GSList *mentions = get_mentions(prefs_get_boolean(PREF_NOTIFY_MENTION_WHOLE_WORD), prefs_get_boolean(PREF_NOTIFY_MENTION_CASE_SENSITIVE), message->plain, mynick);
+        GList *triggers = prefs_message_get_triggers(message->plain);
 
-    win_print_history(window, timestamp, line->str);
-    g_string_free(line, TRUE);
+        mucwin_incoming_msg(mucwin, message, mentions, triggers);
+
+        g_slist_free(mentions);
+        g_list_free_full(triggers, free);
+    }
 
-    plugins_on_room_history_message(mucwin->roomjid, nick, message, timestamp);
+    g_free(muc_history_color);
+    plugins_on_room_history_message(mucwin->roomjid, nick, message->plain, message->timestamp);
 }
 
 static void
@@ -530,7 +549,7 @@ mucwin_outgoing_msg(ProfMucWin *mucwin, const char *const message, const char *c
 }
 
 void
-mucwin_incoming_msg(ProfMucWin *mucwin, ProfMessage *message, GSList *mentions, GList *triggers)
+mucwin_incoming_msg(ProfMucWin *mucwin, const ProfMessage *const message, GSList *mentions, GList *triggers)
 {
     assert(mucwin != NULL);
     int flags = 0;