Fix reconnect keys
This commit is contained in:
parent
6f09752db4
commit
0020f81e79
@ -1073,6 +1073,7 @@ check_autojoin_channels (server *serv)
|
||||
session *sess;
|
||||
GSList *list = sess_list;
|
||||
GSList *sess_channels = NULL; /* joined channels that are not in the favorites list */
|
||||
favchannel *fav;
|
||||
|
||||
/* shouldn't really happen, the io tag is destroyed in server.c */
|
||||
if (!is_server (serv))
|
||||
@ -1080,17 +1081,7 @@ check_autojoin_channels (server *serv)
|
||||
return;
|
||||
}
|
||||
|
||||
/* autojoin to favorite channels */
|
||||
if (serv->favlist)
|
||||
{
|
||||
serv->p_join_list (serv, serv->favlist);
|
||||
i++;
|
||||
|
||||
/* FIXME this is not going to work and is not needed either. server_free() does the job already. */
|
||||
/* g_slist_free_full (serv->favlist, (GDestroyNotify) servlist_favchan_free); */
|
||||
}
|
||||
|
||||
/* upon a reconnect, also autojoin to channels not in the favorites but joined during the session */
|
||||
/* If there's a session (i.e. this is a reconnect), autojoin to everything that was open previously. */
|
||||
while (list)
|
||||
{
|
||||
sess = list->data;
|
||||
@ -1102,11 +1093,20 @@ check_autojoin_channels (server *serv)
|
||||
strcpy (sess->waitchannel, sess->willjoinchannel);
|
||||
sess->willjoinchannel[0] = 0;
|
||||
|
||||
if (!servlist_favchan_find (serv->network, sess->waitchannel, NULL)) /* don't reconnect if it's already in the favlist */
|
||||
fav = servlist_favchan_find (serv->network, sess->waitchannel, NULL); /* Is this channel in our favorites? */
|
||||
|
||||
/* session->channelkey is initially unset for channels joined from the favorites. You have to fill them up manually from favorites settings. */
|
||||
if (fav)
|
||||
{
|
||||
sess_channels = servlist_favchan_listadd (sess_channels, sess->waitchannel, sess->channelkey);
|
||||
i++;
|
||||
/* session->channelkey is set if there was a key change during the session. In that case, use the session key, not the one from favorites. */
|
||||
if (fav->key && !strlen (sess->channelkey))
|
||||
{
|
||||
safe_strcpy (sess->channelkey, fav->key, sizeof (sess->channelkey));
|
||||
}
|
||||
}
|
||||
|
||||
sess_channels = servlist_favchan_listadd (sess_channels, sess->waitchannel, sess->channelkey);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1118,6 +1118,18 @@ check_autojoin_channels (server *serv)
|
||||
serv->p_join_list (serv, sess_channels);
|
||||
g_slist_free_full (sess_channels, (GDestroyNotify) servlist_favchan_free);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If there's no session, just autojoin to favorites. */
|
||||
if (serv->favlist)
|
||||
{
|
||||
serv->p_join_list (serv, serv->favlist);
|
||||
i++;
|
||||
|
||||
/* FIXME this is not going to work and is not needed either. server_free() does the job already. */
|
||||
/* g_slist_free_full (serv->favlist, (GDestroyNotify) servlist_favchan_free); */
|
||||
}
|
||||
}
|
||||
|
||||
serv->joindelay_tag = 0;
|
||||
fe_server_event (serv, FE_SE_LOGGEDIN, i);
|
||||
|
Loading…
Reference in New Issue
Block a user