add ignore check, emphasis and fix a memory leak

This commit is contained in:
ailin-nemui 2019-10-11 22:37:09 +02:00
parent 7e694fd223
commit 145d1040ac

View File

@ -67,13 +67,14 @@ static void sig_message_own_public(SERVER_REC *server, const char *msg,
} }
/* received msg to all ops in channel */ /* received msg to all ops in channel.
TODO: this code is a duplication of sig_message_public */
static void sig_message_irc_op_public(SERVER_REC *server, const char *msg, static void sig_message_irc_op_public(SERVER_REC *server, const char *msg,
const char *nick, const char *address, const char *nick, const char *address,
const char *target) const char *target)
{ {
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
char *nickmode, *optarget, *prefix, *color; char *nickmode, *optarget, *prefix, *color, *freemsg = NULL;
const char *cleantarget; const char *cleantarget;
int for_me, level; int for_me, level;
HILIGHT_REC *hilight; HILIGHT_REC *hilight;
@ -86,26 +87,33 @@ static void sig_message_irc_op_public(SERVER_REC *server, const char *msg,
/* and clean the rest here */ /* and clean the rest here */
cleantarget = get_visible_target(IRC_SERVER(server), cleantarget); cleantarget = get_visible_target(IRC_SERVER(server), cleantarget);
nickmode = channel_get_nickmode(channel_find(server, cleantarget), if (ignore_check_plus(server, nick, address, cleantarget, msg, &level, TRUE)) {
nick); g_free(prefix);
return;
}
chanrec = channel_find(server, cleantarget);
nickmode = channel_get_nickmode(chanrec, nick);
optarget = g_strconcat(prefix, cleantarget, NULL); optarget = g_strconcat(prefix, cleantarget, NULL);
chanrec = channel_find(server, target);
/* Check for hilights */ /* Check for hilights */
for_me = !settings_get_bool("hilight_nick_matches") ? FALSE : for_me = !settings_get_bool("hilight_nick_matches") ? FALSE :
!settings_get_bool("hilight_nick_matches_everywhere") ? !settings_get_bool("hilight_nick_matches_everywhere") ?
nick_match_msg(chanrec, msg, server->nick) : nick_match_msg(chanrec, msg, server->nick) :
nick_match_msg_everywhere(chanrec, msg, server->nick); nick_match_msg_everywhere(chanrec, msg, server->nick);
hilight = for_me ? NULL : hilight = for_me ? NULL :
hilight_match_nick(server, target, nick, address, MSGLEVEL_PUBLIC, msg); hilight_match_nick(server, cleantarget, nick, address, MSGLEVEL_PUBLIC, msg);
color = (hilight == NULL) ? NULL : hilight_get_color(hilight); color = (hilight == NULL) ? NULL : hilight_get_color(hilight);
level = MSGLEVEL_PUBLIC; level = MSGLEVEL_PUBLIC;
if (for_me) if (for_me)
level |= MSGLEVEL_HILIGHT; level |= MSGLEVEL_HILIGHT;
if (settings_get_bool("emphasis"))
msg = freemsg = expand_emphasis((WI_ITEM_REC *) chanrec, msg);
if (color != NULL) { if (color != NULL) {
format_create_dest(&dest, server, cleantarget, level, NULL); format_create_dest(&dest, server, cleantarget, level, NULL);
dest.address = address; dest.address = address;
@ -119,7 +127,10 @@ static void sig_message_irc_op_public(SERVER_REC *server, const char *msg,
for_me ? TXT_PUBMSG_ME_CHANNEL : TXT_PUBMSG_CHANNEL, for_me ? TXT_PUBMSG_ME_CHANNEL : TXT_PUBMSG_CHANNEL,
nick, optarget, msg, nickmode); nick, optarget, msg, nickmode);
} }
g_free(nickmode); g_free(nickmode);
g_free(freemsg);
g_free(color);
g_free(optarget); g_free(optarget);
g_free(prefix); g_free(prefix);
} }