summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/irc/core/irc-nicklist.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c
index 5863dcc9..75bc17c2 100644
--- a/src/irc/core/irc-nicklist.c
+++ b/src/irc/core/irc-nicklist.c
@@ -112,19 +112,28 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data)
g_free(params);
}
-static void event_end_of_names(SERVER_REC *server, const char *data)
+static void event_end_of_names(IRC_SERVER_REC *server, const char *data)
{
char *params, *channel;
- CHANNEL_REC *chanrec;
-
+ IRC_CHANNEL_REC *chanrec;
+ NICK_REC *ownnick;
+ int nicks;
+
g_return_if_fail(server != NULL);
params = event_get_params(data, 2, NULL, &channel);
- chanrec = channel_find(server, channel);
+ chanrec = irc_channel_find(server, channel);
if (chanrec != NULL && !chanrec->names_got) {
- nicklist_set_own(chanrec,
- nicklist_find(chanrec, server->nick));
+ ownnick = nicklist_find(CHANNEL(chanrec), server->nick);
+ if (ownnick == NULL) {
+ /* stupid server - assume we have ops
+ if channel is empty */
+ nicks = g_hash_table_size(chanrec->nicks);
+ irc_nicklist_insert(chanrec, server->nick,
+ nicks == 0, FALSE, FALSE);
+ }
+ nicklist_set_own(CHANNEL(chanrec), ownnick);
chanrec->chanop = chanrec->ownnick->op;
chanrec->names_got = TRUE;
signal_emit("channel joined", 1, chanrec);