mirror of
https://github.com/weechat/weechat.git
synced 2026-06-28 05:46:38 +02:00
Fix bug with IRC nicks on reconnection: try all nicks in list, even if nick used was not the first in list of nicks
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
WeeChat ChangeLog
|
||||
=================
|
||||
FlashCode <flashcode@flashtux.org>
|
||||
v0.3.2-dev, 2010-03-29
|
||||
v0.3.2-dev, 2010-03-30
|
||||
|
||||
|
||||
Version 0.3.2 (under dev!)
|
||||
@@ -61,6 +61,8 @@ Version 0.3.2 (under dev!)
|
||||
(bug #28741)
|
||||
* irc: add new option irc.look.part_closes_buffer to close buffer when /part
|
||||
is issued on channel (task #10295)
|
||||
* irc: fix bug with nicks on reconnection: try all nicks in list, even if nick
|
||||
used was not the first in list of nicks
|
||||
* irc: fix command /list: send channel and server name given as argument, and
|
||||
use separate option "-re" to allow a regex
|
||||
* irc: fix PART message received on Undernet server (bug #28825)
|
||||
|
||||
@@ -3542,7 +3542,7 @@ IRC_PROTOCOL_CALLBACK(368)
|
||||
|
||||
IRC_PROTOCOL_CALLBACK(432)
|
||||
{
|
||||
int i, nick_found, nick_to_use;
|
||||
int nick_index;
|
||||
struct t_gui_buffer *ptr_buffer;
|
||||
|
||||
/*
|
||||
@@ -3559,24 +3559,13 @@ IRC_PROTOCOL_CALLBACK(432)
|
||||
ptr_buffer = irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL, NULL);
|
||||
|
||||
nick_found = -1;
|
||||
nick_to_use = -1;
|
||||
for (i = 0; i < server->nicks_count; i++)
|
||||
{
|
||||
if (strcmp (server->nick, server->nicks_array[i]) == 0)
|
||||
{
|
||||
nick_found = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nick_found < 0)
|
||||
nick_to_use = 0;
|
||||
nick_index = irc_server_get_nick_index (server);
|
||||
if (nick_index < 0)
|
||||
nick_index = 0;
|
||||
else
|
||||
{
|
||||
if (nick_found < server->nicks_count - 1)
|
||||
nick_to_use = nick_found + 1;
|
||||
}
|
||||
if (nick_to_use < 0)
|
||||
nick_index = (nick_index + 1) % server->nicks_count;
|
||||
|
||||
if (nick_index == server->nick_first_tried)
|
||||
{
|
||||
weechat_printf (ptr_buffer,
|
||||
_("%s%s: all declared nicknames are "
|
||||
@@ -3592,10 +3581,10 @@ IRC_PROTOCOL_CALLBACK(432)
|
||||
_("%s%s: nickname \"%s\" is invalid, "
|
||||
"trying nickname #%d (\"%s\")"),
|
||||
weechat_prefix ("error"),
|
||||
IRC_PLUGIN_NAME, server->nick, nick_to_use + 1,
|
||||
server->nicks_array[nick_to_use]);
|
||||
IRC_PLUGIN_NAME, server->nick, nick_index + 1,
|
||||
server->nicks_array[nick_index]);
|
||||
|
||||
irc_server_set_nick (server, server->nicks_array[nick_to_use]);
|
||||
irc_server_set_nick (server, server->nicks_array[nick_index]);
|
||||
|
||||
irc_server_sendf (server, 0, "NICK %s", server->nick);
|
||||
}
|
||||
@@ -3609,7 +3598,7 @@ IRC_PROTOCOL_CALLBACK(432)
|
||||
|
||||
IRC_PROTOCOL_CALLBACK(433)
|
||||
{
|
||||
int i, nick_found, nick_to_use;
|
||||
int nick_index;
|
||||
struct t_gui_buffer *ptr_buffer;
|
||||
|
||||
/*
|
||||
@@ -3621,25 +3610,14 @@ IRC_PROTOCOL_CALLBACK(433)
|
||||
{
|
||||
ptr_buffer = irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL, NULL);
|
||||
|
||||
nick_found = -1;
|
||||
nick_to_use = -1;
|
||||
for (i = 0; i < server->nicks_count; i++)
|
||||
{
|
||||
if (strcmp (server->nick, server->nicks_array[i]) == 0)
|
||||
{
|
||||
nick_found = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nick_found < 0)
|
||||
nick_to_use = 0;
|
||||
|
||||
nick_index = irc_server_get_nick_index (server);
|
||||
if (nick_index < 0)
|
||||
nick_index = 0;
|
||||
else
|
||||
{
|
||||
if (nick_found < server->nicks_count - 1)
|
||||
nick_to_use = nick_found + 1;
|
||||
}
|
||||
if (nick_to_use < 0)
|
||||
nick_index = (nick_index + 1) % server->nicks_count;
|
||||
|
||||
if (nick_index == server->nick_first_tried)
|
||||
{
|
||||
weechat_printf (ptr_buffer,
|
||||
_("%s%s: all declared nicknames are "
|
||||
@@ -3654,10 +3632,10 @@ IRC_PROTOCOL_CALLBACK(433)
|
||||
weechat_printf (ptr_buffer,
|
||||
_("%s: nickname \"%s\" is already in use, "
|
||||
"trying nickname #%d (\"%s\")"),
|
||||
IRC_PLUGIN_NAME, server->nick,
|
||||
nick_to_use + 1, server->nicks_array[nick_to_use]);
|
||||
IRC_PLUGIN_NAME, server->nick, nick_index + 1,
|
||||
server->nicks_array[nick_index]);
|
||||
|
||||
irc_server_set_nick (server, server->nicks_array[nick_to_use]);
|
||||
irc_server_set_nick (server, server->nicks_array[nick_index]);
|
||||
|
||||
irc_server_sendf (server, 0, "NICK %s", server->nick);
|
||||
}
|
||||
|
||||
@@ -272,6 +272,32 @@ irc_server_set_nick (struct t_irc_server *server, const char *nick)
|
||||
weechat_bar_item_update ("input_prompt");
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_get_nick_index: get index of nick in array "nicks_array"
|
||||
* return -1 if nick is not set or not found in
|
||||
* "nicks_array"
|
||||
*/
|
||||
|
||||
int
|
||||
irc_server_get_nick_index (struct t_irc_server *server)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!server->nick)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < server->nicks_count; i++)
|
||||
{
|
||||
if (strcmp (server->nick, server->nicks_array[i]) == 0)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
/* nick not found */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_alloc: allocate a new server and add it to the servers queue
|
||||
*/
|
||||
@@ -327,6 +353,7 @@ irc_server_alloc (const char *name)
|
||||
new_server->unterminated_message = NULL;
|
||||
new_server->nicks_count = 0;
|
||||
new_server->nicks_array = NULL;
|
||||
new_server->nick_first_tried = 0;
|
||||
new_server->nick = NULL;
|
||||
new_server->nick_modes = NULL;
|
||||
new_server->prefix = NULL;
|
||||
@@ -2022,7 +2049,10 @@ irc_server_login (struct t_irc_server *server)
|
||||
irc_server_set_nick (server,
|
||||
(server->nicks_array) ?
|
||||
server->nicks_array[0] : "weechat");
|
||||
server->nick_first_tried = 0;
|
||||
}
|
||||
else
|
||||
server->nick_first_tried = irc_server_get_nick_index (server);
|
||||
|
||||
if (irc_server_sasl_enabled (server))
|
||||
{
|
||||
|
||||
@@ -133,6 +133,8 @@ struct t_irc_server
|
||||
char *unterminated_message; /* beginning of a message in input buf */
|
||||
int nicks_count; /* number of nicknames */
|
||||
char **nicks_array; /* nicknames (after split) */
|
||||
int nick_first_tried; /* first nick tried in list of nicks */
|
||||
/* when (re-)connecting to server */
|
||||
char *nick; /* current nickname */
|
||||
char *nick_modes; /* nick modes */
|
||||
char *prefix; /* nick prefix allowed (from msg 005) */
|
||||
@@ -186,6 +188,7 @@ extern void irc_server_set_addresses (struct t_irc_server *server,
|
||||
const char *addresses);
|
||||
extern void irc_server_set_nicks (struct t_irc_server *server, const char *nicks);
|
||||
extern void irc_server_set_nick (struct t_irc_server *server, const char *nick);
|
||||
extern int irc_server_get_nick_index (struct t_irc_server *server);
|
||||
extern struct t_irc_server *irc_server_alloc (const char *name);
|
||||
extern int irc_server_alloc_with_url (const char *irc_url);
|
||||
extern void irc_server_apply_command_line_options (struct t_irc_server *server,
|
||||
|
||||
Reference in New Issue
Block a user