diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/irc/irc-config.c | 5 | ||||
-rw-r--r-- | src/plugins/irc/irc-nick.c | 11 | ||||
-rw-r--r-- | src/plugins/irc/irc-nick.h | 1 | ||||
-rw-r--r-- | src/plugins/irc/irc-protocol.c | 16 | ||||
-rw-r--r-- | src/plugins/irc/irc-upgrade.c | 5 |
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 |