diff --git a/src/event/server_events.c b/src/event/server_events.c index f8f73d36..5c6703c5 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -68,6 +68,8 @@ #include "ui/ui.h" +static void _clean_incoming_message(ProfMessage *message); + void sv_ev_login_account_success(char *account_name, gboolean secured) { @@ -326,6 +328,7 @@ sv_ev_room_message(ProfMessage *message) GList *triggers = prefs_message_get_triggers(message->plain); + _clean_incoming_message(message); mucwin_incoming_msg(mucwin, message, mentions, triggers); g_slist_free(mentions); @@ -397,6 +400,8 @@ sv_ev_incoming_private_message(ProfMessage *message) ProfWin *window = wins_new_private(message->jid->fulljid); privatewin = (ProfPrivateWin*)window; } + + _clean_incoming_message(message); privwin_incoming_msg(privatewin, message); chat_log_msg_in(message); @@ -418,6 +423,8 @@ sv_ev_delayed_private_message(ProfMessage *message) ProfWin *window = wins_new_private(message->jid->fulljid); privatewin = (ProfPrivateWin*)window; } + + _clean_incoming_message(message); privwin_incoming_msg(privatewin, message); chat_log_msg_in(message); @@ -529,6 +536,7 @@ _sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message message->plain = p_gpg_decrypt(message->encrypted); if (message->plain) { message->enc = PROF_MSG_ENC_PGP; + _clean_incoming_message(message); chatwin_incoming_msg(chatwin, message, new_win); if (logit) { chat_log_pgp_msg_in(message); @@ -543,6 +551,7 @@ _sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message } message->enc = PROF_MSG_ENC_PLAIN; message->plain = strdup(message->body); + _clean_incoming_message(message); chatwin_incoming_msg(chatwin, message, new_win); chat_log_msg_in(message); chatwin->pgp_recv = FALSE; @@ -564,6 +573,7 @@ _sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message message->enc = PROF_MSG_ENC_PLAIN; } + _clean_incoming_message(message); chatwin_incoming_msg(chatwin, message, new_win); chat_log_otr_msg_in(message); @@ -578,6 +588,7 @@ _sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message static void _sv_ev_incoming_omemo(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message, gboolean logit) { + _clean_incoming_message(message); chatwin_incoming_msg(chatwin, message, new_win); if (logit) { chat_log_omemo_msg_in(message); @@ -592,6 +603,7 @@ _sv_ev_incoming_plain(ProfChatWin *chatwin, gboolean new_win, ProfMessage *messa if (message->body) { message->enc = PROF_MSG_ENC_PLAIN; message->plain = strdup(message->body); + _clean_incoming_message(message); chatwin_incoming_msg(chatwin, message, new_win); if (logit) { chat_log_msg_in(message); @@ -1412,3 +1424,21 @@ sv_ev_bookmark_autojoin(Bookmark *bookmark) free(nick); } + +static void +_clean_incoming_message(ProfMessage *message) +{ + if (strstr(message->plain, "\u200E")) { + char **split = g_strsplit(message->plain, "\u200E", -1); + free(message->plain); + message->plain = g_strjoinv("", split); + g_strfreev(split); + } + + if (strstr(message->plain, "\u200F")) { + char **split = g_strsplit(message->plain, "\u200F", -1); + free(message->plain); + message->plain = g_strjoinv("", split); + g_strfreev(split); + } +}