| 71 | | static int channel_rejoin(IRC_SERVER_REC *server, const char *channel) | | 72 | | { | | 73 | | IRC_CHANNEL_REC *chanrec; | | 74 | | REJOIN_REC *rec; | | 75 | | | | 76 | | g_return_val_if_fail(IS_IRC_SERVER(server), 0);
| | 77 | | g_return_val_if_fail(channel != NULL, 0);
| | 78 | | | | 79 | | chanrec = irc_channel_find(server, channel);
| | 80 | | if (chanrec == NULL || chanrec->joined) return 0;
| | 81 | | | | 82 | | if (!settings_get_bool("channels_rejoin_unavailable")) { | | 83 | | chanrec->left = TRUE;
| | 84 | | channel_destroy(CHANNEL(chanrec));
| | 85 | | return 0; | | 86 | | } | | 87 | | | | 88 | | rec = rejoin_find(server, channel); | | 89 | | if (rec != NULL) {
| | 90 | | | | 91 | | rec->joining = FALSE;
| | 92 | | | | 93 | | | | 94 | | g_free_and_null(rec->key);
| | 95 | | if (channel_have_key(chanrec))
| | 96 | | rec->key = g_strdup(chanrec->key); | | 97 | | } else { | | 98 | | | | 99 | | rec = g_new0(REJOIN_REC, 1);
| | 100 | | rec->channel = g_strdup(channel); | | 101 | | if (channel_have_key(chanrec))
| | 102 | | rec->key = g_strdup(chanrec->key); | | 103 | | | | 104 | | server->rejoin_channels = | | 105 | | g_slist_append(server->rejoin_channels, rec); | | 106 | | signal_emit("channel rejoin new", 2, server, rec); | | 107 | | } | | 108 | | | | 109 | | chanrec->left = TRUE;
| | 110 | | channel_destroy(CHANNEL(chanrec));
| | 111 | | return 1; | | 112 | | } |
|