summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-02-02 22:10:20 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-02-02 22:10:20 +0000
commite3875169515c0b571c90b914f16327835eb47105 (patch)
tree7a0c2327e03ef16aba7851236d19abf04ce1ea2b
parent72407171983277df44c1cfe62e3f7abdff9cfa6d (diff)
downloadirssi-e3875169515c0b571c90b914f16327835eb47105.zip
Nicklist updates so that protocol specific xxx_NICK_REC can be used
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1177 dbcabf3a-b0e7-0310-adc4-f8d773084564
-rw-r--r--src/core/nicklist.c27
-rw-r--r--src/core/nicklist.h3
-rw-r--r--src/irc/core/irc-nicklist.c30
-rw-r--r--src/irc/core/irc-nicklist.h8
-rw-r--r--src/irc/core/massjoin.c4
-rw-r--r--src/perl/common/Channel.xs13
-rw-r--r--src/perl/irc/IrcChannel.xs14
-rw-r--r--src/perl/irc/module.h1
8 files changed, 58 insertions, 42 deletions
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;
-
- g_return_val_if_fail(IS_CHANNEL(channel), NULL);
- g_return_val_if_fail(nick != NULL, NULL);
+ MODULE_DATA_INIT(nick);
- rec = g_new0(NICK_REC, 1);
+ nick->type = module_get_uniq_id("NICK", 0);
+ nick->chat_type = channel->chat_type;
- 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"