diff --git a/src/fe-common/irc/fe-events.c b/src/fe-common/irc/fe-events.c index fb811638..746ee16b 100644 --- a/src/fe-common/irc/fe-events.c +++ b/src/fe-common/irc/fe-events.c @@ -241,18 +241,28 @@ static void event_nick(const char *data, IRC_SERVER_REC *server, g_free(params); } -static void event_mode(const char *data, IRC_SERVER_REC *server, const char *nick, const char *addr) +static void event_mode(const char *data, IRC_SERVER_REC *server, + const char *nick, const char *addr) { char *params, *channel, *mode; g_return_if_fail(data != NULL); + + params = event_get_params(data, 2 | PARAM_FLAG_GETREST, + &channel, &mode); + signal_emit("message mode", 5, server, channel, nick, addr, mode); + g_free(params); +} + +/* FIXME: should be moved to fe-common/core/fe-messages.c.. */ +static void sig_message_mode(IRC_SERVER_REC *server, const char *channel, + const char *nick, const char *addr, + const char *mode) +{ if (nick == NULL) nick = server->real_address; - params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &channel, &mode); - if (ignore_check(SERVER(server), nick, addr, channel, mode, MSGLEVEL_MODES)) { - g_free(params); + if (!ignore_check(SERVER(server), nick, addr, channel, mode, MSGLEVEL_MODES)) return; - } if (!ischannel(*channel)) { /* user mode change */ @@ -266,8 +276,6 @@ static void event_mode(const char *data, IRC_SERVER_REC *server, const char *nic printformat(server, channel, MSGLEVEL_MODES, IRCTXT_CHANMODE_CHANGE, channel, mode, nick); } - - g_free(params); } static void event_pong(const char *data, IRC_SERVER_REC *server, const char *nick) @@ -488,6 +496,7 @@ void fe_events_init(void) signal_add("event kill", (SIGNAL_FUNC) event_kill); signal_add("event nick", (SIGNAL_FUNC) event_nick); signal_add("event mode", (SIGNAL_FUNC) event_mode); + signal_add("message mode", (SIGNAL_FUNC) sig_message_mode); signal_add("event pong", (SIGNAL_FUNC) event_pong); signal_add("event invite", (SIGNAL_FUNC) event_invite); signal_add("event topic", (SIGNAL_FUNC) event_topic); @@ -518,6 +527,7 @@ void fe_events_deinit(void) signal_remove("event kill", (SIGNAL_FUNC) event_kill); signal_remove("event nick", (SIGNAL_FUNC) event_nick); signal_remove("event mode", (SIGNAL_FUNC) event_mode); + signal_remove("message mode", (SIGNAL_FUNC) sig_message_mode); signal_remove("event pong", (SIGNAL_FUNC) event_pong); signal_remove("event invite", (SIGNAL_FUNC) event_invite); signal_remove("event topic", (SIGNAL_FUNC) event_topic); diff --git a/src/fe-common/irc/fe-netjoin.c b/src/fe-common/irc/fe-netjoin.c index 40b43dcb..7799bbe2 100644 --- a/src/fe-common/irc/fe-netjoin.c +++ b/src/fe-common/irc/fe-netjoin.c @@ -54,34 +54,10 @@ typedef struct { GString *nicks; } TEMP_PRINT_REC; -static int join_tag, output_hidden; +static int join_tag; static int netjoin_max_nicks, hide_netsplit_quits; static GSList *joinservers; -static void sig_stop(void) -{ - signal_stop(); -} - -static void remove_hide_output(void) -{ - if (output_hidden) { - output_hidden = FALSE; - signal_remove("print text stripped", (SIGNAL_FUNC) sig_stop); - signal_remove("print text", (SIGNAL_FUNC) sig_stop); - } -} - -static void hide_output(void) -{ - if (!output_hidden) { - output_hidden = TRUE; - signal_add_first("print text stripped", - (SIGNAL_FUNC) sig_stop); - signal_add_first("print text", (SIGNAL_FUNC) sig_stop); - } -} - static NETJOIN_SERVER_REC *netjoin_find_server(IRC_SERVER_REC *server) { GSList *tmp; @@ -257,9 +233,6 @@ static int sig_check_netjoins(void) GSList *tmp, *next; int diff; - /* just to make sure that text hiding wasn't left on accidentally */ - remove_hide_output(); - for (tmp = joinservers; tmp != NULL; tmp = next) { NETJOIN_SERVER_REC *server = tmp->data; @@ -285,48 +258,42 @@ static int sig_check_netjoins(void) return 1; } -static void event_quit(const char *data) +static void msg_quit(IRC_SERVER_REC *server, const char *nick, + const char *address, const char *reason) { - if (quitmsg_is_split(data)) - hide_output(); + if (IS_IRC_SERVER(server) && quitmsg_is_split(reason)) + signal_stop(); } -static void event_join(const char *data, IRC_SERVER_REC *server, - const char *nick, const char *address) +static void msg_join(IRC_SERVER_REC *server, const char *channel, + const char *nick, const char *address) { NETSPLIT_REC *split; NETJOIN_REC *netjoin; - char *params, *channel, *tmp; - g_return_if_fail(data != NULL); + if (!IS_IRC_SERVER(server)) + return; - /* just to make sure that text hiding wasn't left on accidentally */ - remove_hide_output(); + if (ignore_check(SERVER(server), nick, address, + channel, NULL, MSGLEVEL_JOINS)) + return; split = netsplit_find(server, nick, address); netjoin = netjoin_find(server, nick); if (split == NULL && netjoin == NULL) return; - params = event_get_params(data, 1, &channel); - tmp = strchr(channel, 7); /* ^G does something weird.. */ - if (tmp != NULL) *tmp = '\0'; - - if (!ignore_check(SERVER(server), nick, address, - channel, NULL, MSGLEVEL_JOINS)) { - if (join_tag == -1) { - join_tag = g_timeout_add(1000, (GSourceFunc) - sig_check_netjoins, NULL); - } - - if (netjoin == NULL) - netjoin = netjoin_add(server, nick, split->channels); - - netjoin->now_channels = g_slist_append(netjoin->now_channels, - g_strdup(channel)); - hide_output(); + if (join_tag == -1) { + join_tag = g_timeout_add(1000, (GSourceFunc) + sig_check_netjoins, NULL); } - g_free(params); + + if (netjoin == NULL) + netjoin = netjoin_add(server, nick, split->channels); + + netjoin->now_channels = g_slist_append(netjoin->now_channels, + g_strdup(channel)); + signal_stop(); } static int netjoin_set_operator(NETJOIN_REC *rec, const char *channel, int on) @@ -343,23 +310,20 @@ static int netjoin_set_operator(NETJOIN_REC *rec, const char *channel, int on) return TRUE; } -static void event_mode(const char *data, IRC_SERVER_REC *server, - const char *sender, const char *addr) +static void msg_mode(IRC_SERVER_REC *server, const char *channel, + const char *sender, const char *addr, const char *data) { NETJOIN_REC *rec; - char *params, *channel, *mode, *nicks; + char *params, *mode, *nicks; char **nicklist, **nick, type; int show; g_return_if_fail(data != NULL); - - params = event_get_params(data, 3 | PARAM_FLAG_GETREST, - &channel, &mode, &nicks); - - if (!ischannel(*channel) || addr != NULL) { - g_free(params); + if (!ischannel(*channel) || addr != NULL) return; - } + + params = event_get_params(data, 2 | PARAM_FLAG_GETREST, + &mode, &nicks); /* parse server mode changes - hide operator status changes and show them in the netjoin message instead as @ before the nick */ @@ -386,7 +350,7 @@ static void event_mode(const char *data, IRC_SERVER_REC *server, } } - if (!show) hide_output(); + if (!show) signal_stop(); g_strfreev(nicklist); g_free(params); @@ -401,19 +365,13 @@ static void read_settings(void) netjoin_max_nicks = settings_get_int("netjoin_max_nicks"); if (old_hide && !hide_netsplit_quits) { - signal_remove("event quit", (SIGNAL_FUNC) event_quit); - signal_remove("event join", (SIGNAL_FUNC) event_join); - signal_remove("event mode", (SIGNAL_FUNC) event_mode); - signal_remove("event quit", (SIGNAL_FUNC) remove_hide_output); - signal_remove("event join", (SIGNAL_FUNC) remove_hide_output); - signal_remove("event mode", (SIGNAL_FUNC) remove_hide_output); + signal_remove("message quit", (SIGNAL_FUNC) msg_quit); + signal_remove("message join", (SIGNAL_FUNC) msg_join); + signal_remove("message mode", (SIGNAL_FUNC) msg_mode); } else if (!old_hide && hide_netsplit_quits) { - signal_add("event quit", (SIGNAL_FUNC) event_quit); - signal_add("event join", (SIGNAL_FUNC) event_join); - signal_add("event mode", (SIGNAL_FUNC) event_mode); - signal_add_last("event quit", (SIGNAL_FUNC) remove_hide_output); - signal_add_last("event join", (SIGNAL_FUNC) remove_hide_output); - signal_add_last("event mode", (SIGNAL_FUNC) remove_hide_output); + signal_add("message quit", (SIGNAL_FUNC) msg_quit); + signal_add("message join", (SIGNAL_FUNC) msg_join); + signal_add("message mode", (SIGNAL_FUNC) msg_mode); } } @@ -423,7 +381,6 @@ void fe_netjoin_init(void) settings_add_int("misc", "netjoin_max_nicks", 10); join_tag = -1; - output_hidden = FALSE; read_settings(); signal_add("setup changed", (SIGNAL_FUNC) read_settings); diff --git a/src/fe-common/irc/module-formats.c b/src/fe-common/irc/module-formats.c index d0f1a3a5..214e1f12 100644 --- a/src/fe-common/irc/module-formats.c +++ b/src/fe-common/irc/module-formats.c @@ -33,10 +33,10 @@ FORMAT_REC fecommon_irc_formats[] = { { "netsplit_join_more", "{netjoin Netsplit} over, joins: $0 (+$1 more)", 2, { 0, 1 } }, { "no_netsplits", "There are no net splits", 0 }, { "netsplits_header", "Nick Channel Server Splitted server", 0 }, - { "netsplits_line", "$[9]0 {[10]1 $[20]2 $3", 4, { 0, 0, 0, 0 } }, + { "netsplits_line", "$[9]0 $[10]1 $[20]2 $3", 4, { 0, 0, 0, 0 } }, { "netsplits_footer", "", 0 }, { "ircnet_added", "Ircnet $0 saved", 1, { 0 } }, - { "ircnet_removed", "Ircnet $0} removed", 1, { 0 } }, + { "ircnet_removed", "Ircnet $0 removed", 1, { 0 } }, { "ircnet_not_found", "Ircnet $0 not found", 1, { 0 } }, { "ircnet_header", "Ircnets:", 0 }, { "ircnet_line", "$0: $1", 2, { 0, 0 } },