diff --git a/src/core/servers-reconnect.c b/src/core/servers-reconnect.c index a095f3c4..79d65aab 100644 --- a/src/core/servers-reconnect.c +++ b/src/core/servers-reconnect.c @@ -44,6 +44,17 @@ void reconnect_save_status(SERVER_CONNECT_REC *conn, SERVER_REC *server) conn->away_reason = !server->usermode_away ? NULL : g_strdup(server->away_reason); + if (!server->connected) { + /* default to channels/usermode from connect record + since server isn't fully connected yet */ + g_free_not_null(conn->channels); + conn->channels = server->connrec->no_autojoin_channels ? NULL : + g_strdup(server->connrec->channels); + + g_free_not_null(conn->channels); + conn->channels = g_strdup(server->connrec->channels); + } + signal_emit("server reconnect save status", 2, conn, server); } diff --git a/src/irc/core/irc-servers-reconnect.c b/src/irc/core/irc-servers-reconnect.c index 1c6865de..07b39b88 100644 --- a/src/irc/core/irc-servers-reconnect.c +++ b/src/irc/core/irc-servers-reconnect.c @@ -52,7 +52,8 @@ static void sig_server_connect_copy(SERVER_CONNECT_REC **dest, static void sig_server_reconnect_save_status(IRC_SERVER_CONNECT_REC *conn, IRC_SERVER_REC *server) { - if (!IS_IRC_SERVER_CONNECT(conn) || !IS_IRC_SERVER(server)) + if (!IS_IRC_SERVER_CONNECT(conn) || !IS_IRC_SERVER(server) || + !server->connected) return; g_free_not_null(conn->channels);