From 25020808710f359e75a85a5252bf0f72443d09ee Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Thu, 14 Jan 2016 23:54:42 +0100 Subject: [PATCH 1/2] Change when the autocmds are sent. As per #175 if a -botcmd is specified for a given channel without a -bots parameter then the command is sent right after joining the channel. --- src/core/channels.c | 15 ++++++++++++--- src/irc/core/irc-channels-setup.c | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/core/channels.c b/src/core/channels.c index 9af8b844..bfde605e 100644 --- a/src/core/channels.c +++ b/src/core/channels.c @@ -245,9 +245,18 @@ void channel_send_autocommands(CHANNEL_REC *channel) if (rec == NULL || rec->autosendcmd == NULL || !*rec->autosendcmd) return; - if (rec->botmasks == NULL || !*rec->botmasks) { - /* just send the command. */ - eval_special_string(rec->autosendcmd, "", channel->server, channel); + if (channel->wholist == FALSE) { + /* if the autosendcmd alone (with no -bots parameter) has been + * specified then send it right after joining the channel, when + * the WHO list hasn't been yet retrieved. + * Depending on the value of the 'channel_max_who_sync' option + * the WHO list might not be retrieved after the join event. */ + + if (rec->botmasks == NULL || !*rec->botmasks) { + /* just send the command. */ + eval_special_string(rec->autosendcmd, "", channel->server, channel); + } + return; } diff --git a/src/irc/core/irc-channels-setup.c b/src/irc/core/irc-channels-setup.c index 2320352d..be69ad63 100644 --- a/src/irc/core/irc-channels-setup.c +++ b/src/irc/core/irc-channels-setup.c @@ -25,9 +25,11 @@ void irc_channels_setup_init(void) { signal_add("channel wholist", (SIGNAL_FUNC) channel_send_autocommands); + signal_add("channel joined", (SIGNAL_FUNC) channel_send_autocommands); } void irc_channels_setup_deinit(void) { signal_remove("channel wholist", (SIGNAL_FUNC) channel_send_autocommands); + signal_remove("channel joined", (SIGNAL_FUNC) channel_send_autocommands); } From eba160ca6df194913d80df67c19e929b9428d77e Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Sun, 24 Jan 2016 23:02:40 +0100 Subject: [PATCH 2/2] Duplicate the code paths for autocommands. --- src/core/channels.c | 40 +++++++++++++++++++++---------- src/core/channels.h | 1 + src/irc/core/irc-channels-setup.c | 4 ++-- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/core/channels.c b/src/core/channels.c index bfde605e..9c3b92ba 100644 --- a/src/core/channels.c +++ b/src/core/channels.c @@ -231,6 +231,31 @@ static int match_nick_flags(SERVER_REC *server, NICK_REC *nick, char flag) /* Send the auto send command to channel */ void channel_send_autocommands(CHANNEL_REC *channel) +{ + CHANNEL_SETUP_REC *rec; + + g_return_if_fail(IS_CHANNEL(channel)); + + if (channel->session_rejoin) + return; + + rec = channel_setup_find(channel->name, channel->server->connrec->chatnet); + if (rec == NULL || rec->autosendcmd == NULL || !*rec->autosendcmd) + return; + + /* if the autosendcmd alone (with no -bots parameter) has been + * specified then send it right after joining the channel, when + * the WHO list hasn't been yet retrieved. + * Depending on the value of the 'channel_max_who_sync' option + * the WHO list might not be retrieved after the join event. */ + + if (rec->botmasks == NULL || !*rec->botmasks) { + /* just send the command. */ + eval_special_string(rec->autosendcmd, "", channel->server, channel); + } +} + +void channel_send_botcommands(CHANNEL_REC *channel) { CHANNEL_SETUP_REC *rec; NICK_REC *nick; @@ -245,20 +270,9 @@ void channel_send_autocommands(CHANNEL_REC *channel) if (rec == NULL || rec->autosendcmd == NULL || !*rec->autosendcmd) return; - if (channel->wholist == FALSE) { - /* if the autosendcmd alone (with no -bots parameter) has been - * specified then send it right after joining the channel, when - * the WHO list hasn't been yet retrieved. - * Depending on the value of the 'channel_max_who_sync' option - * the WHO list might not be retrieved after the join event. */ - - if (rec->botmasks == NULL || !*rec->botmasks) { - /* just send the command. */ - eval_special_string(rec->autosendcmd, "", channel->server, channel); - } - + /* this case has already been handled by channel_send_autocommands */ + if (rec->botmasks == NULL || !*rec->botmasks) return; - } /* find first available bot.. */ bots = g_strsplit(rec->botmasks, " ", -1); diff --git a/src/core/channels.h b/src/core/channels.h index 0839d69b..bd136fe2 100644 --- a/src/core/channels.h +++ b/src/core/channels.h @@ -31,6 +31,7 @@ void channel_change_visible_name(CHANNEL_REC *channel, const char *name); /* Send the auto send command to channel */ void channel_send_autocommands(CHANNEL_REC *channel); +void channel_send_botcommands(CHANNEL_REC *channel); void channels_init(void); void channels_deinit(void); diff --git a/src/irc/core/irc-channels-setup.c b/src/irc/core/irc-channels-setup.c index be69ad63..bbbc095c 100644 --- a/src/irc/core/irc-channels-setup.c +++ b/src/irc/core/irc-channels-setup.c @@ -24,12 +24,12 @@ void irc_channels_setup_init(void) { - signal_add("channel wholist", (SIGNAL_FUNC) channel_send_autocommands); + signal_add("channel wholist", (SIGNAL_FUNC) channel_send_botcommands); signal_add("channel joined", (SIGNAL_FUNC) channel_send_autocommands); } void irc_channels_setup_deinit(void) { - signal_remove("channel wholist", (SIGNAL_FUNC) channel_send_autocommands); + signal_remove("channel wholist", (SIGNAL_FUNC) channel_send_botcommands); signal_remove("channel joined", (SIGNAL_FUNC) channel_send_autocommands); }