diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 6899d18d9..2a2a34b67 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -20,6 +20,7 @@ New features:: Bug fixes:: + * irc: fix autojoin of channels when private buffers are opened (issue #2012) * irc: fix string comparison when CASEMAPPING is set to "ascii" * script: fix crash when a `/script` command triggers another `/script` command (issue #923) diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 0c100e89a..ee2797a8c 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -1596,6 +1596,25 @@ irc_server_buffer_set_input_multiline (struct t_irc_server *server, } } +/* + * Checks if a server has channels opened. + */ + +int +irc_server_has_channels (struct t_irc_server *server) +{ + struct t_irc_channel *ptr_channel; + + for (ptr_channel = server->channels; ptr_channel; + ptr_channel = ptr_channel->next_channel) + { + if (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL) + return 1; + } + + return 0; +} + /* * Allocates a new server and adds it to the servers queue. * @@ -5846,7 +5865,7 @@ irc_server_autojoin_create_buffers (struct t_irc_server *server) * buffers are opened only if auto-join was not already done * and if no channels are currently opened */ - if (server->autojoin_done || server->channels) + if (server->autojoin_done || irc_server_has_channels (server)) return; /* evaluate server option "autojoin" */ @@ -6007,7 +6026,7 @@ irc_server_autojoin_channels (struct t_irc_server *server) return; } - if (!server->autojoin_done && !server->channels) + if (!server->autojoin_done && !irc_server_has_channels (server)) { /* auto-join when connecting to server for first time */ autojoin = irc_server_eval_expression ( @@ -6021,7 +6040,7 @@ irc_server_autojoin_channels (struct t_irc_server *server) if (autojoin) free (autojoin); } - else if (server->channels) + else if (irc_server_has_channels (server)) { /* auto-join after disconnection (only rejoins opened channels) */ autojoin = irc_server_build_autojoin (server); diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h index 4b88cfb33..3d49d64ae 100644 --- a/src/plugins/irc/irc-server.h +++ b/src/plugins/irc/irc-server.h @@ -387,6 +387,7 @@ extern char *irc_server_get_default_msg (const char *default_msg, const char *target_nick); extern void irc_server_buffer_set_input_multiline (struct t_irc_server *server, int multiline); +extern int irc_server_has_channels (struct t_irc_server *server); extern struct t_irc_server *irc_server_alloc (const char *name); extern struct t_irc_server *irc_server_alloc_with_url (const char *irc_url); extern void irc_server_apply_command_line_options (struct t_irc_server *server, diff --git a/tests/unit/plugins/irc/test-irc-server.cpp b/tests/unit/plugins/irc/test-irc-server.cpp index 1e22fc1c4..2c1e9ad3c 100644 --- a/tests/unit/plugins/irc/test-irc-server.cpp +++ b/tests/unit/plugins/irc/test-irc-server.cpp @@ -797,6 +797,16 @@ TEST(IrcServer, GetDefaultMsg) /* TODO: write tests */ } +/* + * Tests functions: + * irc_server_has_channels + */ + +TEST(IrcServer, HasChannels) +{ + /* TODO: write tests */ +} + /* * Tests functions: * irc_server_alloc