diff --git a/src/core/ignore.c b/src/core/ignore.c index 5b89f6f4..58999709 100644 --- a/src/core/ignore.c +++ b/src/core/ignore.c @@ -191,6 +191,22 @@ int ignore_check(SERVER_REC *server, const char *nick, const char *host, return ignore_check_flags(server, nick, host, channel, text, level, 0); } +int ignore_check_plus(SERVER_REC *server, const char *nick, const char *address, + const char *target, const char *msg, int *level, int test_ignore) { + int olevel = *level; + + if (test_ignore && ignore_check(server, nick, address, target, msg, olevel)) + return TRUE; + + if (ignore_check_flags(server, nick, address, target, msg, olevel, MSGLEVEL_NO_ACT)) + *level |= MSGLEVEL_NO_ACT; + + if (ignore_check_flags(server, nick, address, target, msg, olevel, MSGLEVEL_HIDDEN)) + *level |= MSGLEVEL_HIDDEN; + + return FALSE; +} + IGNORE_REC *ignore_find_full(const char *servertag, const char *mask, const char *pattern, char **channels, const int flags) { diff --git a/src/core/ignore.h b/src/core/ignore.h index 607ee115..20c5475e 100644 --- a/src/core/ignore.h +++ b/src/core/ignore.h @@ -27,6 +27,8 @@ int ignore_check(SERVER_REC *server, const char *nick, const char *host, const char *channel, const char *text, int level); int ignore_check_flags(SERVER_REC *server, const char *nick, const char *host, const char *channel, const char *text, int level, int flags); +int ignore_check_plus(SERVER_REC *server, const char *nick, const char *host, + const char *channel, const char *text, int *level, int test_ignore); enum { IGNORE_FIND_PATTERN = 0x01, /* Match the pattern */ diff --git a/src/fe-common/core/fe-messages.c b/src/fe-common/core/fe-messages.c index 31a2011d..12cb1055 100644 --- a/src/fe-common/core/fe-messages.c +++ b/src/fe-common/core/fe-messages.c @@ -201,11 +201,7 @@ static void sig_message_public(SERVER_REC *server, const char *msg, if (for_me) level |= MSGLEVEL_HILIGHT; - if (ignore_check_flags(server, nick, address, target, msg, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, target, msg, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(server, nick, address, target, msg, &level, FALSE); if (settings_get_bool("emphasis")) msg = freemsg = expand_emphasis((WI_ITEM_REC *) chanrec, msg); @@ -263,11 +259,7 @@ static void sig_message_private(SERVER_REC *server, const char *msg, if (settings_get_bool("emphasis")) msg = freemsg = expand_emphasis((WI_ITEM_REC *) query, msg); - if (ignore_check_flags(server, nick, address, NULL, msg, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, NULL, msg, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(server, nick, address, NULL, msg, &level, FALSE); if (own) { printformat(server, target, level, @@ -361,11 +353,7 @@ static void sig_message_join(SERVER_REC *server, const char *channel, { int level = MSGLEVEL_JOINS; - if (ignore_check_flags(server, nick, address, channel, NULL, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, channel, NULL, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(server, nick, address, channel, NULL, &level, FALSE); printformat(server, channel, level, TXT_JOIN, nick, address, channel); @@ -377,11 +365,7 @@ static void sig_message_part(SERVER_REC *server, const char *channel, { int level = MSGLEVEL_PARTS; - if (ignore_check_flags(server, nick, address, channel, NULL, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, channel, NULL, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(server, nick, address, channel, NULL, &level, FALSE); printformat(server, channel, level, TXT_PART, nick, address, channel, reason); @@ -396,15 +380,9 @@ static void sig_message_quit(SERVER_REC *server, const char *nick, char *print_channel; int once, count, level = MSGLEVEL_QUITS; - if (ignore_check(server, nick, address, NULL, reason, MSGLEVEL_QUITS)) + if (ignore_check_plus(server, nick, address, NULL, reason, &level, TRUE)) return; - if (ignore_check_flags(server, nick, address, NULL, reason, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, NULL, reason, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; - print_channel = NULL; once = settings_get_bool("show_quit_once"); @@ -418,18 +396,12 @@ static void sig_message_quit(SERVER_REC *server, const char *nick, if (!nicklist_find(rec, nick)) continue; - if (ignore_check(server, nick, address, rec->visible_name, - reason, MSGLEVEL_QUITS)) { + if (ignore_check_plus(server, nick, address, rec->visible_name, + reason, &level, TRUE)) { count++; continue; } - if (ignore_check_flags(server, nick, address, rec->visible_name, reason, MSGLEVEL_QUITS, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, rec->visible_name, reason, MSGLEVEL_QUITS, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; - if (print_channel == NULL || active_win->active == (WI_ITEM_REC *) rec) print_channel = rec->visible_name; @@ -476,11 +448,7 @@ static void sig_message_kick(SERVER_REC *server, const char *channel, { int level = MSGLEVEL_KICKS; - if (ignore_check_flags(server, kicker, address, channel, reason, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, kicker, address, channel, reason, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(server, kicker, address, channel, reason, &level, FALSE); printformat(server, channel, level, TXT_KICK, nick, channel, kicker, reason, address); @@ -493,18 +461,11 @@ static void print_nick_change_channel(SERVER_REC *server, const char *channel, { int level; - if (ignore_check(server, oldnick, address, - channel, newnick, MSGLEVEL_NICKS)) - return; - level = MSGLEVEL_NICKS; if (ownnick) level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, oldnick, address, channel, newnick, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, oldnick, address, channel, newnick, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + if (ignore_check_plus(server, oldnick, address, + channel, newnick, &level, TRUE)) + return; printformat(server, channel, level, ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED, @@ -582,11 +543,7 @@ static void sig_message_topic(SERVER_REC *server, const char *channel, { int level = MSGLEVEL_TOPICS; - if (ignore_check_flags(server, nick, address, channel, topic, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, channel, topic, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(server, nick, address, channel, topic, &level, FALSE); printformat(server, channel, level, *topic != '\0' ? TXT_NEW_TOPIC : TXT_TOPIC_UNSET, diff --git a/src/fe-common/irc/dcc/fe-dcc-chat-messages.c b/src/fe-common/irc/dcc/fe-dcc-chat-messages.c index 9ae88c8e..41cea64c 100644 --- a/src/fe-common/irc/dcc/fe-dcc-chat-messages.c +++ b/src/fe-common/irc/dcc/fe-dcc-chat-messages.c @@ -92,13 +92,8 @@ static void sig_message_dcc(CHAT_DCC_REC *dcc, const char *msg) tag = g_strconcat("=", dcc->id, NULL); query = query_find(NULL, tag); - if (ignore_check_flags(SERVER(dcc->server), tag, dcc->addrstr, NULL, msg, - level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(SERVER(dcc->server), tag, dcc->addrstr, NULL, msg, - level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(SERVER(dcc->server), tag, dcc->addrstr, NULL, msg, + &level, FALSE); format_create_dest_tag(&dest, dcc->server, dcc->servertag, tag, level, NULL); @@ -118,13 +113,8 @@ static void sig_message_dcc_action(CHAT_DCC_REC *dcc, const char *msg) tag = g_strconcat("=", dcc->id, NULL); query = query_find(NULL, tag); - if (ignore_check_flags(SERVER(dcc->server), tag, dcc->addrstr, NULL, msg, - level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(SERVER(dcc->server), tag, dcc->addrstr, NULL, msg, - level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(SERVER(dcc->server), tag, dcc->addrstr, NULL, msg, + &level, FALSE); format_create_dest_tag(&dest, dcc->server, dcc->servertag, tag, level, NULL); @@ -143,13 +133,8 @@ static void sig_message_dcc_ctcp(CHAT_DCC_REC *dcc, const char *cmd, tag = g_strconcat("=", dcc->id, NULL); - if (ignore_check_flags(SERVER(dcc->server), tag, dcc->addrstr, NULL, cmd, - level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(SERVER(dcc->server), tag, dcc->addrstr, NULL, cmd, - level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; + ignore_check_plus(SERVER(dcc->server), tag, dcc->addrstr, NULL, cmd, + &level, FALSE); format_create_dest_tag(&dest, dcc->server, dcc->servertag, tag, level, NULL); diff --git a/src/fe-common/irc/fe-irc-messages.c b/src/fe-common/irc/fe-irc-messages.c index 86e0836c..89c501a8 100644 --- a/src/fe-common/irc/fe-irc-messages.c +++ b/src/fe-common/irc/fe-irc-messages.c @@ -155,17 +155,9 @@ static void sig_message_irc_action(IRC_SERVER_REC *server, const char *msg, level = MSGLEVEL_ACTIONS | (server_ischannel(SERVER(server), target) ? MSGLEVEL_PUBLIC : MSGLEVEL_MSGS); - if (ignore_check(SERVER(server), nick, address, target, msg, level)) + if (ignore_check_plus(SERVER(server), nick, address, target, msg, &level, TRUE)) return; - if (ignore_check_flags(SERVER(server), nick, address, target, msg, - level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(SERVER(server), nick, address, target, msg, - level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; - if (server_ischannel(SERVER(server), target)) { item = irc_channel_find(server, target); } else { @@ -226,30 +218,21 @@ static void sig_message_irc_notice(SERVER_REC *server, const char *msg, target = fe_channel_skip_prefix(IRC_SERVER(server), target); if (address == NULL || *address == '\0') { + level = MSGLEVEL_SNOTES; /* notice from server */ - if (!ignore_check(server, nick, "", - target, msg, MSGLEVEL_SNOTES)) { - printformat(server, target, MSGLEVEL_SNOTES, + if (!ignore_check_plus(server, nick, "", + target, msg, &level, TRUE)) { + printformat(server, target, level, IRCTXT_NOTICE_SERVER, nick, msg); } return; } - if (ignore_check(server, nick, address, + if (ignore_check_plus(server, nick, address, server_ischannel(SERVER(server), target) ? target : NULL, - msg, level)) + msg, &level, TRUE)) return; - if (ignore_check_flags(server, nick, address, - server_ischannel(SERVER(server), target) ? target : NULL, - msg, level, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(server, nick, address, - server_ischannel(SERVER(server), target) ? target : NULL, - msg, level, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; - if (server_ischannel(SERVER(server), target)) { /* notice in some channel */ printformat(server, target, level, diff --git a/src/fe-common/irc/fe-modes.c b/src/fe-common/irc/fe-modes.c index ad829757..dfe65c2d 100644 --- a/src/fe-common/irc/fe-modes.c +++ b/src/fe-common/irc/fe-modes.c @@ -166,18 +166,10 @@ static void sig_message_mode(IRC_SERVER_REC *server, const char *channel, if (nick == NULL) nick = server->real_address; - if (ignore_check(SERVER(server), nick, addr, channel, - mode, MSGLEVEL_MODES)) + if (ignore_check_plus(SERVER(server), nick, addr, channel, + mode, &level, TRUE)) return; - if (ignore_check_flags(SERVER(server), nick, addr, channel, - mode, MSGLEVEL_MODES, MSGLEVEL_NO_ACT)) - level |= MSGLEVEL_NO_ACT; - - if (ignore_check_flags(SERVER(server), nick, addr, channel, - mode, MSGLEVEL_MODES, MSGLEVEL_HIDDEN)) - level |= MSGLEVEL_HIDDEN; - if (!server_ischannel(SERVER(server), channel)) { /* user mode change */ printformat(server, NULL, level,