summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/irc/irc-config.c5
-rw-r--r--src/plugins/irc/irc-nick.c11
-rw-r--r--src/plugins/irc/irc-nick.h1
-rw-r--r--src/plugins/irc/irc-protocol.c16
-rw-r--r--src/plugins/irc/irc-upgrade.c5
5 files changed, 21 insertions, 17 deletions
diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c
index 8075903c4..604a591da 100644
--- a/src/plugins/irc/irc-config.c
+++ b/src/plugins/irc/irc-config.c
@@ -1562,8 +1562,9 @@ irc_config_server_new_option (struct t_config_file *config_file,
option_name, "string",
/* TRANSLATORS: please keep words "client capabilities" between brackets if translation is different (see fr.po) */
N_("comma-separated list of client capabilities to enable for "
- "server if they are available (example: "
- "\"multi-prefix,extended-join\")"),
+ "server if they are available; capabilities supported by "
+ "WeeChat are: multi-prefix, userhost-in-names (example: "
+ "\"multi-prefix,userhost-in-names\")"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
diff --git a/src/plugins/irc/irc-nick.c b/src/plugins/irc/irc-nick.c
index 6cd62860f..4ea83df4f 100644
--- a/src/plugins/irc/irc-nick.c
+++ b/src/plugins/irc/irc-nick.c
@@ -606,15 +606,22 @@ irc_nick_nicklist_set_color_all ()
struct t_irc_nick *
irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
- const char *nickname, const char *prefixes, int away)
+ const char *nickname, const char *host, const char *prefixes,
+ int away)
{
struct t_irc_nick *new_nick, *ptr_nick;
int length;
+ if (!nickname || !nickname[0])
+ return NULL;
+
/* nick already exists on this channel? */
ptr_nick = irc_nick_search (server, channel, nickname);
if (ptr_nick)
{
+ /* save away status from existing nick (before removing it) */
+ away = ptr_nick->away;
+
/* remove old nick from nicklist */
irc_nick_nicklist_remove (server, channel, ptr_nick);
@@ -634,7 +641,7 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
/* initialize new nick */
new_nick->name = strdup (nickname);
- new_nick->host = NULL;
+ new_nick->host = (host) ? strdup (host) : NULL;
length = strlen (irc_server_get_prefix_chars (server));
new_nick->prefixes = malloc (length + 1);
if (new_nick->prefixes)
diff --git a/src/plugins/irc/irc-nick.h b/src/plugins/irc/irc-nick.h
index d2ab2aab9..fa50caf4c 100644
--- a/src/plugins/irc/irc-nick.h
+++ b/src/plugins/irc/irc-nick.h
@@ -62,6 +62,7 @@ extern void irc_nick_nicklist_set_color_all ();
extern struct t_irc_nick *irc_nick_new (struct t_irc_server *server,
struct t_irc_channel *channel,
const char *nickname,
+ const char *host,
const char *prefixes,
int away);
extern void irc_nick_change (struct t_irc_server *server,
diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c
index de26867ad..8cea4fcb8 100644
--- a/src/plugins/irc/irc-protocol.c
+++ b/src/plugins/irc/irc-protocol.c
@@ -566,9 +566,7 @@ IRC_PROTOCOL_CALLBACK(join)
}
/* add nick in channel */
- ptr_nick = irc_nick_new (server, ptr_channel, nick, NULL, 0);
- if (ptr_nick)
- ptr_nick->host = strdup (address);
+ ptr_nick = irc_nick_new (server, ptr_channel, nick, address, NULL, 0);
if (!ignored)
{
@@ -3802,9 +3800,8 @@ IRC_PROTOCOL_CALLBACK(353)
{
char *pos_channel, *pos_nick, *pos_nick_orig, *pos_host, *nickname;
char *prefixes, *str_nicks;
- int args, i, away, length;
+ int args, i, length;
struct t_irc_channel *ptr_channel;
- struct t_irc_nick *ptr_nick;
IRC_PROTOCOL_MIN_ARGS(5);
@@ -3857,7 +3854,10 @@ IRC_PROTOCOL_CALLBACK(353)
/* extract nick from host */
pos_host = strchr (pos_nick, '!');
if (pos_host)
+ {
nickname = weechat_strndup (pos_nick, pos_host - pos_nick);
+ pos_host++;
+ }
else
nickname = strdup (pos_nick);
@@ -3866,10 +3866,8 @@ IRC_PROTOCOL_CALLBACK(353)
{
if (ptr_channel && ptr_channel->nicks)
{
- ptr_nick = irc_nick_search (server, ptr_channel, nickname);
- away = (ptr_nick && ptr_nick->away) ? 1 : 0;
- if (!irc_nick_new (server, ptr_channel, nickname, prefixes,
- away))
+ if (!irc_nick_new (server, ptr_channel, nickname, pos_host,
+ prefixes, 0))
{
weechat_printf (server->buffer,
_("%s%s: cannot create nick \"%s\" "
diff --git a/src/plugins/irc/irc-upgrade.c b/src/plugins/irc/irc-upgrade.c
index 27f6c54b7..1c6b32789 100644
--- a/src/plugins/irc/irc-upgrade.c
+++ b/src/plugins/irc/irc-upgrade.c
@@ -540,14 +540,11 @@ irc_upgrade_read_cb (void *data,
ptr_nick = irc_nick_new (irc_upgrade_current_server,
irc_upgrade_current_channel,
weechat_infolist_string (infolist, "name"),
+ weechat_infolist_string (infolist, "host"),
weechat_infolist_string (infolist, "prefixes"),
weechat_infolist_integer (infolist, "away"));
if (ptr_nick)
{
- str = weechat_infolist_string (infolist, "host");
- if (str)
- ptr_nick->host = strdup (str);
-
/*
* "flags" is not any more in this infolist (since
* WeeChat 0.3.4), but we read it to keep compatibility