diff --git a/src/core/nicklist.c b/src/core/nicklist.c index 4014afc1..fab66154 100644 --- a/src/core/nicklist.c +++ b/src/core/nicklist.c @@ -31,30 +31,15 @@ (isalnum(a) || (unsigned char) (a) >= 128) /* Add new nick to list */ -NICK_REC *nicklist_insert(CHANNEL_REC *channel, const char *nick, - int op, int voice, int send_massjoin) +void nicklist_insert(CHANNEL_REC *channel, NICK_REC *nick) { - NICK_REC *rec; + MODULE_DATA_INIT(nick); - g_return_val_if_fail(IS_CHANNEL(channel), NULL); - g_return_val_if_fail(nick != NULL, NULL); + nick->type = module_get_uniq_id("NICK", 0); + nick->chat_type = channel->chat_type; - rec = g_new0(NICK_REC, 1); - - MODULE_DATA_INIT(rec); - rec->type = module_get_uniq_id("NICK", 0); - rec->chat_type = channel->chat_type; - - if (op) rec->op = TRUE; - if (voice) rec->voice = TRUE; - - rec->send_massjoin = send_massjoin; - rec->nick = g_strdup(nick); - rec->host = NULL; - - g_hash_table_insert(channel->nicks, rec->nick, rec); - signal_emit("nicklist new", 2, channel, rec); - return rec; + g_hash_table_insert(channel->nicks, nick->nick, nick); + signal_emit("nicklist new", 2, channel, nick); } /* Set host address for nick */ diff --git a/src/core/nicklist.h b/src/core/nicklist.h index 46604feb..2c47562d 100644 --- a/src/core/nicklist.h +++ b/src/core/nicklist.h @@ -13,8 +13,7 @@ struct _NICK_REC { }; /* Add new nick to list */ -NICK_REC *nicklist_insert(CHANNEL_REC *channel, const char *nick, - int op, int voice, int send_massjoin); +void nicklist_insert(CHANNEL_REC *channel, NICK_REC *nick); /* Set host address for nick */ void nicklist_set_host(CHANNEL_REC *channel, NICK_REC *nick, const char *host); /* Remove nick from list */ diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 57c4ccc8..ddfbd686 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -29,6 +29,26 @@ #include "modes.h" #include "servers.h" +/* Add new nick to list */ +NICK_REC *irc_nicklist_insert(IRC_CHANNEL_REC *channel, const char *nick, + int op, int voice, int send_massjoin) +{ + NICK_REC *rec; + + g_return_val_if_fail(IS_IRC_CHANNEL(channel), NULL); + g_return_val_if_fail(nick != NULL, NULL); + + rec = g_new0(NICK_REC, 1); + rec->nick = g_strdup(nick); + + if (op) rec->op = TRUE; + if (voice) rec->voice = TRUE; + rec->send_massjoin = send_massjoin; + + nicklist_insert(CHANNEL(channel), rec); + return rec; +} + #define isnickchar(a) \ (isalnum((int) (a)) || (a) == '`' || (a) == '-' || (a) == '_' || \ (a) == '[' || (a) == ']' || (a) == '{' || (a) == '}' || \ @@ -53,16 +73,16 @@ char *irc_nick_strip(const char *nick) return stripped; } -static void event_names_list(SERVER_REC *server, const char *data) +static void event_names_list(IRC_SERVER_REC *server, const char *data) { - CHANNEL_REC *chanrec; + IRC_CHANNEL_REC *chanrec; char *params, *type, *channel, *names, *ptr; g_return_if_fail(data != NULL); params = event_get_params(data, 4, NULL, &type, &channel, &names); - chanrec = channel_find(server, channel); + chanrec = irc_channel_find(server, channel); if (chanrec == NULL || chanrec->names_got) { /* unknown channel / names list already read */ g_free(params); @@ -85,8 +105,8 @@ static void event_names_list(SERVER_REC *server, const char *data) while (*names != '\0' && *names != ' ') names++; if (*names != '\0') *names++ = '\0'; - nicklist_insert(chanrec, ptr+isnickflag(*ptr), - *ptr == '@', *ptr == '+', FALSE); + irc_nicklist_insert(chanrec, ptr+isnickflag(*ptr), + *ptr == '@', *ptr == '+', FALSE); } g_free(params); diff --git a/src/irc/core/irc-nicklist.h b/src/irc/core/irc-nicklist.h index f6c7be51..7d0ae2f4 100644 --- a/src/irc/core/irc-nicklist.h +++ b/src/irc/core/irc-nicklist.h @@ -3,10 +3,14 @@ #include "nicklist.h" -void irc_nicklist_init(void); -void irc_nicklist_deinit(void); +/* Add new nick to list */ +NICK_REC *irc_nicklist_insert(IRC_CHANNEL_REC *channel, const char *nick, + int op, int voice, int send_massjoin); /* Remove all "extra" characters from `nick'. Like _nick_ -> nick */ char *irc_nick_strip(const char *nick); +void irc_nicklist_init(void); +void irc_nicklist_deinit(void); + #endif diff --git a/src/irc/core/massjoin.c b/src/irc/core/massjoin.c index 1c7d55fb..13df8694 100644 --- a/src/irc/core/massjoin.c +++ b/src/irc/core/massjoin.c @@ -25,7 +25,7 @@ #include "irc.h" #include "irc-servers.h" #include "irc-channels.h" -#include "nicklist.h" +#include "irc-nicklist.h" static int massjoin_tag; static int massjoin_max_joins; @@ -58,7 +58,7 @@ static void event_join(IRC_SERVER_REC *server, const char *data, if (chanrec == NULL) return; /* add user to nicklist */ - nickrec = nicklist_insert(CHANNEL(chanrec), nick, FALSE, FALSE, TRUE); + nickrec = irc_nicklist_insert(chanrec, nick, FALSE, FALSE, TRUE); nicklist_set_host(CHANNEL(chanrec), nickrec, address); if (chanrec->massjoins == 0) { diff --git a/src/perl/common/Channel.xs b/src/perl/common/Channel.xs index 40522769..2a248060 100644 --- a/src/perl/common/Channel.xs +++ b/src/perl/common/Channel.xs @@ -83,17 +83,12 @@ void channel_destroy(channel) Irssi::Channel channel -Irssi::Nick -nick_insert(channel, nick, op, voice, send_massjoin) +void +nick_insert(channel, nick) Irssi::Channel channel - char *nick - int op - int voice - int send_massjoin + Irssi::Nick nick CODE: - RETVAL = nicklist_insert(channel, nick, op, voice, send_massjoin); -OUTPUT: - RETVAL + nicklist_insert(channel, nick); void nick_remove(channel, nick) diff --git a/src/perl/irc/IrcChannel.xs b/src/perl/irc/IrcChannel.xs index 948b5b2a..776c3438 100644 --- a/src/perl/irc/IrcChannel.xs +++ b/src/perl/irc/IrcChannel.xs @@ -1,4 +1,4 @@ -MODULE = Irssi::Irc PACKAGE = Irssi::Irc::Channel PREFIX = irc_channel_ +MODULE = Irssi::Irc PACKAGE = Irssi::Irc::Channel PREFIX = irc_ void bans(channel) @@ -34,6 +34,18 @@ PPCODE: XPUSHs(new_pv(tmp->data)); } +Irssi::Nick +irc_nick_insert(channel, nick, op, voice, send_massjoin) + Irssi::Channel channel + char *nick + int op + int voice + int send_massjoin +CODE: + RETVAL = irc_nicklist_insert(channel, nick, op, voice, send_massjoin); +OUTPUT: + RETVAL + MODULE = Irssi::Irc PACKAGE = Irssi::Irc::Server PREFIX = irc_ Irssi::Irc::Channel diff --git a/src/perl/irc/module.h b/src/perl/irc/module.h index 1c8890ea..170dddc3 100644 --- a/src/perl/irc/module.h +++ b/src/perl/irc/module.h @@ -4,6 +4,7 @@ #include "irc-servers.h" #include "irc-channels.h" #include "irc-queries.h" +#include "irc-nicklist.h" #include "bans.h" #include "modes.h"