mirror of
https://github.com/irssi/irssi.git
synced 2024-12-04 14:46:39 -05:00
Apply -usermode before -autosendcmd.
The -usermode is now implicitly treated as a requested usermode change; the MODE command setting it is not redirected. This is good because user MODE may or may not give a reply and this could be confused with the MODE message indicating the initial usermode. Possible issue here: '-' modes in -usermode persist only until you change your umode via /mode. Bug #548 git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4668 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
6331ffdc2b
commit
7d30a05879
@ -475,34 +475,6 @@ char *irc_server_get_channels(IRC_SERVER_REC *server)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sig_set_user_mode(IRC_SERVER_REC *server)
|
|
||||||
{
|
|
||||||
const char *mode;
|
|
||||||
char *newmode, *args;
|
|
||||||
|
|
||||||
if (!IS_IRC_SERVER(server) || g_slist_find(servers, server) == NULL)
|
|
||||||
return 0; /* not an irc server or got disconnected */
|
|
||||||
|
|
||||||
mode = server->connrec->usermode;
|
|
||||||
newmode = server->usermode == NULL ? NULL :
|
|
||||||
modes_join(NULL, server->usermode, mode, FALSE);
|
|
||||||
|
|
||||||
if (newmode == NULL || strcmp(newmode, server->usermode) != 0) {
|
|
||||||
/* change the user mode. we used to do some trickery to
|
|
||||||
get rid of unwanted modes at reconnect time, but that's
|
|
||||||
more trouble than worth. (eg. we don't want to remove
|
|
||||||
some good default server modes, but we don't want to
|
|
||||||
set back +r, etc..) */
|
|
||||||
args = g_strdup_printf((*mode == '+' || *mode == '-') ? "%s %s" :
|
|
||||||
"%s +%s", server->nick, mode);
|
|
||||||
signal_emit("command mode", 3, args, server, NULL);
|
|
||||||
g_free(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free_not_null(newmode);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void event_connected(IRC_SERVER_REC *server, const char *data, const char *from)
|
static void event_connected(IRC_SERVER_REC *server, const char *data, const char *from)
|
||||||
{
|
{
|
||||||
char *params, *nick;
|
char *params, *nick;
|
||||||
@ -533,8 +505,15 @@ static void event_connected(IRC_SERVER_REC *server, const char *data, const char
|
|||||||
memcpy(&server->wait_cmd, &now, sizeof(GTimeVal));
|
memcpy(&server->wait_cmd, &now, sizeof(GTimeVal));
|
||||||
|
|
||||||
if (server->connrec->usermode != NULL) {
|
if (server->connrec->usermode != NULL) {
|
||||||
/* wait a second and then send the user mode */
|
/* Send the user mode, before the autosendcmd.
|
||||||
g_timeout_add(1000, (GSourceFunc) sig_set_user_mode, server);
|
* Do not pass this through cmd_mode because it
|
||||||
|
* is not known whether the resulting MODE message
|
||||||
|
* (if any) is the initial umode or a reply to this.
|
||||||
|
*/
|
||||||
|
irc_send_cmdv(server, "MODE %s %s", server->nick,
|
||||||
|
server->connrec->usermode);
|
||||||
|
g_free_not_null(server->wanted_usermode);
|
||||||
|
server->wanted_usermode = g_strdup(server->connrec->usermode);
|
||||||
}
|
}
|
||||||
|
|
||||||
signal_emit("event connected", 1, server);
|
signal_emit("event connected", 1, server);
|
||||||
|
Loading…
Reference in New Issue
Block a user