diff options
Diffstat (limited to 'src/ui/mucwin.c')
-rw-r--r-- | src/ui/mucwin.c | 49 |
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; |