1
0
mirror of https://github.com/irssi/irssi.git synced 2024-11-03 04:27:19 -05:00

Don't autojoin channels that have already been joined in some other server

connection in same chat network. This has mostly been just annoying, and
this enables us to add eg. 20 channels autojoinable, then create 2 server
connections and irssi will automatically join the first 10 in first
connection and 10 other in the later (well, or at least if the 10 later
channels get "not enough channels" message from server before the connection
is finished, which well might not happen .. problem :)


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1875 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2001-10-21 11:08:49 +00:00 committed by cras
parent e5c9dc37dc
commit 06c431bcd7

View File

@ -114,17 +114,47 @@ CHANNEL_REC *channel_find(SERVER_REC *server, const char *name)
(void *) name); (void *) name);
} }
static CHANNEL_REC *channel_find_servers(GSList *servers, const char *name)
{
return gslist_foreach_find(servers,
(FOREACH_FIND_FUNC) channel_find_server,
(void *) name);
}
static GSList *servers_find_chatnet_except(SERVER_REC *server)
{
GSList *tmp, *list;
list = NULL;
for (tmp = servers; tmp != NULL; tmp = tmp->next) {
SERVER_REC *rec = tmp->data;
if (server != rec && rec->connrec->chatnet != NULL &&
strcmp(server->connrec->chatnet,
rec->connrec->chatnet) == 0) {
/* chatnets match */
list = g_slist_append(list, rec);
}
}
return list;
}
/* connected to server, autojoin to channels. */ /* connected to server, autojoin to channels. */
static void event_connected(SERVER_REC *server) static void event_connected(SERVER_REC *server)
{ {
GString *chans; GString *chans;
GSList *tmp; GSList *tmp, *chatnet_servers;
g_return_if_fail(SERVER(server)); g_return_if_fail(SERVER(server));
if (server->connrec->reconnection) if (server->connrec->reconnection)
return; return;
/* get list of servers in same chat network */
chatnet_servers = server->connrec->chatnet == NULL ? NULL:
servers_find_chatnet_except(server);
/* join to the channels marked with autojoin in setup */ /* join to the channels marked with autojoin in setup */
chans = g_string_new(NULL); chans = g_string_new(NULL);
for (tmp = setupchannels; tmp != NULL; tmp = tmp->next) { for (tmp = setupchannels; tmp != NULL; tmp = tmp->next) {
@ -135,7 +165,10 @@ static void event_connected(SERVER_REC *server)
server->connrec->chatnet)) server->connrec->chatnet))
continue; continue;
g_string_sprintfa(chans, "%s,", rec->name); /* check that we haven't already joined this channel in
same chat network connection.. */
if (channel_find_servers(servers, rec->name) == NULL)
g_string_sprintfa(chans, "%s,", rec->name);
} }
if (chans->len > 0) { if (chans->len > 0) {