mirror of
https://github.com/weechat/weechat.git
synced 2026-06-27 21:36:37 +02:00
Fixed server option "command_delay": does not freeze WeeChat any more
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2007-08-17
|
||||
ChangeLog - 2007-08-20
|
||||
|
||||
|
||||
Version 0.2.6 (under dev!):
|
||||
* fixed server option "command_delay": does not freeze WeeChat any more
|
||||
* added paste detection, new options look_paste_max_lines and
|
||||
col_input_actions (task #5442)
|
||||
* fixed bug with highlight and UTF-8 chars around word (bug #20753)
|
||||
|
||||
@@ -260,6 +260,7 @@ session_save_servers (FILE *file)
|
||||
rc = rc && (session_write_str (file, SESSION_SERV_NICK_MODES, ptr_server->nick_modes));
|
||||
rc = rc && (session_write_str (file, SESSION_SERV_PREFIX, ptr_server->prefix));
|
||||
rc = rc && (session_write_buf (file, SESSION_SERV_RECONNECT_START, &(ptr_server->reconnect_start), sizeof (time_t)));
|
||||
rc = rc && (session_write_buf (file, SESSION_SERV_COMMAND_TIME, &(ptr_server->command_time), sizeof (time_t)));
|
||||
rc = rc && (session_write_int (file, SESSION_SERV_RECONNECT_JOIN, ptr_server->reconnect_join));
|
||||
rc = rc && (session_write_int (file, SESSION_SERV_IS_AWAY, ptr_server->is_away));
|
||||
rc = rc && (session_write_str (file, SESSION_SERV_AWAY_MESSAGE, ptr_server->away_message));
|
||||
@@ -993,6 +994,9 @@ session_load_server (FILE *file)
|
||||
case SESSION_SERV_RECONNECT_START:
|
||||
rc = rc && (session_read_buf (file, &(session_current_server->reconnect_start), sizeof (time_t)));
|
||||
break;
|
||||
case SESSION_SERV_COMMAND_TIME:
|
||||
rc = rc && (session_read_buf (file, &(session_current_server->command_time), sizeof (time_t)));
|
||||
break;
|
||||
case SESSION_SERV_RECONNECT_JOIN:
|
||||
rc = rc && (session_read_int (file, &(session_current_server->reconnect_join)));
|
||||
break;
|
||||
|
||||
@@ -92,7 +92,8 @@ enum t_session_server
|
||||
SESSION_SERV_HOSTNAME,
|
||||
SESSION_SERV_NICK_MODES,
|
||||
SESSION_SERV_AWAY_MESSAGE,
|
||||
SESSION_SERV_PREFIX
|
||||
SESSION_SERV_PREFIX,
|
||||
SESSION_SERV_COMMAND_TIME
|
||||
};
|
||||
|
||||
enum t_session_channel
|
||||
|
||||
@@ -1049,7 +1049,7 @@ t_config_option weechat_options_server[] =
|
||||
"", NULL, NULL, &(cfg_server.command), NULL },
|
||||
{ "server_command_delay", N_("delay (in seconds) after command was executed"),
|
||||
N_("delay (in seconds) after command was executed (example: give some time for authentication)"),
|
||||
OPTION_TYPE_INT, 0, 5, 0,
|
||||
OPTION_TYPE_INT, 0, 3600, 0,
|
||||
NULL, NULL, &(cfg_server.command_delay), NULL, NULL },
|
||||
{ "server_autojoin", N_("list of channels to join when connected to server"),
|
||||
N_("comma separated list of channels to join when connected to server (example: \"#chan1,#chan2,#chan3 key1,key2\")"),
|
||||
|
||||
@@ -253,6 +253,14 @@ gui_main_loop ()
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* check if it's time to autojoin channels (after command delay) */
|
||||
if ((ptr_server->command_time != 0)
|
||||
&& (new_time >= ptr_server->command_time + ptr_server->command_delay))
|
||||
{
|
||||
irc_server_autojoin_channels (ptr_server);
|
||||
ptr_server->command_time = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ptr_server->is_connected && (ptr_server->child_pid > 0))
|
||||
|
||||
+18
-41
@@ -2421,7 +2421,6 @@ irc_recv_cmd_001 (t_irc_server *server, char *host, char *nick, char *arguments)
|
||||
{
|
||||
char *pos;
|
||||
char **commands, **ptr, *vars_replaced;
|
||||
t_irc_channel *ptr_channel;
|
||||
char *away_msg;
|
||||
|
||||
pos = strchr (arguments, ' ');
|
||||
@@ -2438,8 +2437,17 @@ irc_recv_cmd_001 (t_irc_server *server, char *host, char *nick, char *arguments)
|
||||
/* connection to IRC server is ok! */
|
||||
server->is_connected = 1;
|
||||
server->lag_next_check = time (NULL) + cfg_irc_lag_check;
|
||||
gui_status_draw (server->buffer, 1);
|
||||
gui_input_draw (server->buffer, 1);
|
||||
|
||||
/* set away message if user was away (before disconnection for example) */
|
||||
if (server->away_message && server->away_message[0])
|
||||
{
|
||||
away_msg = strdup (server->away_message);
|
||||
if (away_msg)
|
||||
{
|
||||
irc_send_away (server, away_msg);
|
||||
free (away_msg);
|
||||
}
|
||||
}
|
||||
|
||||
/* execute command when connected */
|
||||
if (server->command && server->command[0])
|
||||
@@ -2460,46 +2468,15 @@ irc_recv_cmd_001 (t_irc_server *server, char *host, char *nick, char *arguments)
|
||||
}
|
||||
|
||||
if (server->command_delay > 0)
|
||||
sleep (server->command_delay);
|
||||
}
|
||||
|
||||
/* auto-join after disconnection (only rejoins opened channels) */
|
||||
if (!server->disable_autojoin && server->reconnect_join && server->channels)
|
||||
{
|
||||
for (ptr_channel = server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
{
|
||||
if (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
{
|
||||
if (ptr_channel->key)
|
||||
irc_server_sendf (server, "JOIN %s %s",
|
||||
ptr_channel->name, ptr_channel->key);
|
||||
else
|
||||
irc_server_sendf (server, "JOIN %s",
|
||||
ptr_channel->name);
|
||||
}
|
||||
}
|
||||
server->reconnect_join = 0;
|
||||
server->command_time = time (NULL) + 1;
|
||||
else
|
||||
irc_server_autojoin_channels (server);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* auto-join when connecting to server for first time */
|
||||
if (!server->disable_autojoin && server->autojoin && server->autojoin[0])
|
||||
return irc_send_cmd_join (server, NULL, server->autojoin);
|
||||
}
|
||||
|
||||
/* set away message if user was away (before disconnection for example) */
|
||||
if (server->away_message && server->away_message[0])
|
||||
{
|
||||
away_msg = strdup (server->away_message);
|
||||
if (away_msg)
|
||||
{
|
||||
irc_send_away (server, away_msg);
|
||||
free (away_msg);
|
||||
}
|
||||
}
|
||||
|
||||
server->disable_autojoin = 0;
|
||||
irc_server_autojoin_channels (server);
|
||||
|
||||
gui_status_draw (server->buffer, 1);
|
||||
gui_input_draw (server->buffer, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -116,6 +116,7 @@ irc_server_init (t_irc_server *server)
|
||||
server->nick_modes = NULL;
|
||||
server->prefix = NULL;
|
||||
server->reconnect_start = 0;
|
||||
server->command_time = 0;
|
||||
server->reconnect_join = 0;
|
||||
server->disable_autojoin = 0;
|
||||
server->is_away = 0;
|
||||
@@ -2074,6 +2075,43 @@ irc_server_disconnect_all ()
|
||||
irc_server_disconnect (ptr_server, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_autojoin_channels: autojoin (or rejoin) channels
|
||||
*/
|
||||
|
||||
void
|
||||
irc_server_autojoin_channels (t_irc_server *server)
|
||||
{
|
||||
t_irc_channel *ptr_channel;
|
||||
|
||||
/* auto-join after disconnection (only rejoins opened channels) */
|
||||
if (!server->disable_autojoin && server->reconnect_join && server->channels)
|
||||
{
|
||||
for (ptr_channel = server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
{
|
||||
if (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
{
|
||||
if (ptr_channel->key)
|
||||
irc_server_sendf (server, "JOIN %s %s",
|
||||
ptr_channel->name, ptr_channel->key);
|
||||
else
|
||||
irc_server_sendf (server, "JOIN %s",
|
||||
ptr_channel->name);
|
||||
}
|
||||
}
|
||||
server->reconnect_join = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* auto-join when connecting to server for first time */
|
||||
if (!server->disable_autojoin && server->autojoin && server->autojoin[0])
|
||||
irc_send_cmd_join (server, NULL, server->autojoin);
|
||||
}
|
||||
|
||||
server->disable_autojoin = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_search: return pointer on a server with a name
|
||||
*/
|
||||
@@ -2355,6 +2393,7 @@ irc_server_print_log (t_irc_server *server)
|
||||
weechat_log_printf (" nick_modes. . . . . : '%s'\n", server->nick_modes);
|
||||
weechat_log_printf (" prefix. . . . . . . : '%s'\n", server->prefix);
|
||||
weechat_log_printf (" reconnect_start . . : %ld\n", server->reconnect_start);
|
||||
weechat_log_printf (" command_time. . . . : %ld\n", server->command_time);
|
||||
weechat_log_printf (" reconnect_join. . . : %d\n", server->reconnect_join);
|
||||
weechat_log_printf (" disable_autojoin. . : %d\n", server->disable_autojoin);
|
||||
weechat_log_printf (" is_away . . . . . . : %d\n", server->is_away);
|
||||
|
||||
@@ -172,6 +172,8 @@ struct t_irc_server
|
||||
char *nick_modes; /* nick modes */
|
||||
char *prefix; /* nick prefix allowed (from msg 005) */
|
||||
time_t reconnect_start; /* this time + delay = reconnect time */
|
||||
time_t command_time; /* this time + command_delay = time to */
|
||||
/* autojoin channels */
|
||||
int reconnect_join; /* 1 if channels opened to rejoin */
|
||||
int disable_autojoin; /* 1 if user asked to not autojoin chans */
|
||||
int is_away; /* 1 is user is marked as away */
|
||||
@@ -384,6 +386,7 @@ extern void irc_server_reconnect (t_irc_server *);
|
||||
extern void irc_server_auto_connect (int, int);
|
||||
extern void irc_server_disconnect (t_irc_server *, int);
|
||||
extern void irc_server_disconnect_all ();
|
||||
extern void irc_server_autojoin_channels ();
|
||||
extern t_irc_server *irc_server_search (char *);
|
||||
extern int irc_server_get_number_connected ();
|
||||
extern void irc_server_get_number_buffer (t_irc_server *, int *, int *);
|
||||
|
||||
+2
-1
@@ -1,10 +1,11 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2007-08-17
|
||||
ChangeLog - 2007-08-20
|
||||
|
||||
|
||||
Version 0.2.6 (under dev!):
|
||||
* fixed server option "command_delay": does not freeze WeeChat any more
|
||||
* added paste detection, new options look_paste_max_lines and
|
||||
col_input_actions (task #5442)
|
||||
* fixed bug with highlight and UTF-8 chars around word (bug #20753)
|
||||
|
||||
@@ -260,6 +260,7 @@ session_save_servers (FILE *file)
|
||||
rc = rc && (session_write_str (file, SESSION_SERV_NICK_MODES, ptr_server->nick_modes));
|
||||
rc = rc && (session_write_str (file, SESSION_SERV_PREFIX, ptr_server->prefix));
|
||||
rc = rc && (session_write_buf (file, SESSION_SERV_RECONNECT_START, &(ptr_server->reconnect_start), sizeof (time_t)));
|
||||
rc = rc && (session_write_buf (file, SESSION_SERV_COMMAND_TIME, &(ptr_server->command_time), sizeof (time_t)));
|
||||
rc = rc && (session_write_int (file, SESSION_SERV_RECONNECT_JOIN, ptr_server->reconnect_join));
|
||||
rc = rc && (session_write_int (file, SESSION_SERV_IS_AWAY, ptr_server->is_away));
|
||||
rc = rc && (session_write_str (file, SESSION_SERV_AWAY_MESSAGE, ptr_server->away_message));
|
||||
@@ -993,6 +994,9 @@ session_load_server (FILE *file)
|
||||
case SESSION_SERV_RECONNECT_START:
|
||||
rc = rc && (session_read_buf (file, &(session_current_server->reconnect_start), sizeof (time_t)));
|
||||
break;
|
||||
case SESSION_SERV_COMMAND_TIME:
|
||||
rc = rc && (session_read_buf (file, &(session_current_server->command_time), sizeof (time_t)));
|
||||
break;
|
||||
case SESSION_SERV_RECONNECT_JOIN:
|
||||
rc = rc && (session_read_int (file, &(session_current_server->reconnect_join)));
|
||||
break;
|
||||
|
||||
@@ -92,7 +92,8 @@ enum t_session_server
|
||||
SESSION_SERV_HOSTNAME,
|
||||
SESSION_SERV_NICK_MODES,
|
||||
SESSION_SERV_AWAY_MESSAGE,
|
||||
SESSION_SERV_PREFIX
|
||||
SESSION_SERV_PREFIX,
|
||||
SESSION_SERV_COMMAND_TIME
|
||||
};
|
||||
|
||||
enum t_session_channel
|
||||
|
||||
@@ -1049,7 +1049,7 @@ t_config_option weechat_options_server[] =
|
||||
"", NULL, NULL, &(cfg_server.command), NULL },
|
||||
{ "server_command_delay", N_("delay (in seconds) after command was executed"),
|
||||
N_("delay (in seconds) after command was executed (example: give some time for authentication)"),
|
||||
OPTION_TYPE_INT, 0, 5, 0,
|
||||
OPTION_TYPE_INT, 0, 3600, 0,
|
||||
NULL, NULL, &(cfg_server.command_delay), NULL, NULL },
|
||||
{ "server_autojoin", N_("list of channels to join when connected to server"),
|
||||
N_("comma separated list of channels to join when connected to server (example: \"#chan1,#chan2,#chan3 key1,key2\")"),
|
||||
|
||||
@@ -253,6 +253,14 @@ gui_main_loop ()
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* check if it's time to autojoin channels (after command delay) */
|
||||
if ((ptr_server->command_time != 0)
|
||||
&& (new_time >= ptr_server->command_time + ptr_server->command_delay))
|
||||
{
|
||||
irc_server_autojoin_channels (ptr_server);
|
||||
ptr_server->command_time = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ptr_server->is_connected && (ptr_server->child_pid > 0))
|
||||
|
||||
+18
-41
@@ -2421,7 +2421,6 @@ irc_recv_cmd_001 (t_irc_server *server, char *host, char *nick, char *arguments)
|
||||
{
|
||||
char *pos;
|
||||
char **commands, **ptr, *vars_replaced;
|
||||
t_irc_channel *ptr_channel;
|
||||
char *away_msg;
|
||||
|
||||
pos = strchr (arguments, ' ');
|
||||
@@ -2438,8 +2437,17 @@ irc_recv_cmd_001 (t_irc_server *server, char *host, char *nick, char *arguments)
|
||||
/* connection to IRC server is ok! */
|
||||
server->is_connected = 1;
|
||||
server->lag_next_check = time (NULL) + cfg_irc_lag_check;
|
||||
gui_status_draw (server->buffer, 1);
|
||||
gui_input_draw (server->buffer, 1);
|
||||
|
||||
/* set away message if user was away (before disconnection for example) */
|
||||
if (server->away_message && server->away_message[0])
|
||||
{
|
||||
away_msg = strdup (server->away_message);
|
||||
if (away_msg)
|
||||
{
|
||||
irc_send_away (server, away_msg);
|
||||
free (away_msg);
|
||||
}
|
||||
}
|
||||
|
||||
/* execute command when connected */
|
||||
if (server->command && server->command[0])
|
||||
@@ -2460,46 +2468,15 @@ irc_recv_cmd_001 (t_irc_server *server, char *host, char *nick, char *arguments)
|
||||
}
|
||||
|
||||
if (server->command_delay > 0)
|
||||
sleep (server->command_delay);
|
||||
}
|
||||
|
||||
/* auto-join after disconnection (only rejoins opened channels) */
|
||||
if (!server->disable_autojoin && server->reconnect_join && server->channels)
|
||||
{
|
||||
for (ptr_channel = server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
{
|
||||
if (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
{
|
||||
if (ptr_channel->key)
|
||||
irc_server_sendf (server, "JOIN %s %s",
|
||||
ptr_channel->name, ptr_channel->key);
|
||||
else
|
||||
irc_server_sendf (server, "JOIN %s",
|
||||
ptr_channel->name);
|
||||
}
|
||||
}
|
||||
server->reconnect_join = 0;
|
||||
server->command_time = time (NULL) + 1;
|
||||
else
|
||||
irc_server_autojoin_channels (server);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* auto-join when connecting to server for first time */
|
||||
if (!server->disable_autojoin && server->autojoin && server->autojoin[0])
|
||||
return irc_send_cmd_join (server, NULL, server->autojoin);
|
||||
}
|
||||
|
||||
/* set away message if user was away (before disconnection for example) */
|
||||
if (server->away_message && server->away_message[0])
|
||||
{
|
||||
away_msg = strdup (server->away_message);
|
||||
if (away_msg)
|
||||
{
|
||||
irc_send_away (server, away_msg);
|
||||
free (away_msg);
|
||||
}
|
||||
}
|
||||
|
||||
server->disable_autojoin = 0;
|
||||
irc_server_autojoin_channels (server);
|
||||
|
||||
gui_status_draw (server->buffer, 1);
|
||||
gui_input_draw (server->buffer, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -116,6 +116,7 @@ irc_server_init (t_irc_server *server)
|
||||
server->nick_modes = NULL;
|
||||
server->prefix = NULL;
|
||||
server->reconnect_start = 0;
|
||||
server->command_time = 0;
|
||||
server->reconnect_join = 0;
|
||||
server->disable_autojoin = 0;
|
||||
server->is_away = 0;
|
||||
@@ -2074,6 +2075,43 @@ irc_server_disconnect_all ()
|
||||
irc_server_disconnect (ptr_server, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_autojoin_channels: autojoin (or rejoin) channels
|
||||
*/
|
||||
|
||||
void
|
||||
irc_server_autojoin_channels (t_irc_server *server)
|
||||
{
|
||||
t_irc_channel *ptr_channel;
|
||||
|
||||
/* auto-join after disconnection (only rejoins opened channels) */
|
||||
if (!server->disable_autojoin && server->reconnect_join && server->channels)
|
||||
{
|
||||
for (ptr_channel = server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
{
|
||||
if (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
{
|
||||
if (ptr_channel->key)
|
||||
irc_server_sendf (server, "JOIN %s %s",
|
||||
ptr_channel->name, ptr_channel->key);
|
||||
else
|
||||
irc_server_sendf (server, "JOIN %s",
|
||||
ptr_channel->name);
|
||||
}
|
||||
}
|
||||
server->reconnect_join = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* auto-join when connecting to server for first time */
|
||||
if (!server->disable_autojoin && server->autojoin && server->autojoin[0])
|
||||
irc_send_cmd_join (server, NULL, server->autojoin);
|
||||
}
|
||||
|
||||
server->disable_autojoin = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_search: return pointer on a server with a name
|
||||
*/
|
||||
@@ -2355,6 +2393,7 @@ irc_server_print_log (t_irc_server *server)
|
||||
weechat_log_printf (" nick_modes. . . . . : '%s'\n", server->nick_modes);
|
||||
weechat_log_printf (" prefix. . . . . . . : '%s'\n", server->prefix);
|
||||
weechat_log_printf (" reconnect_start . . : %ld\n", server->reconnect_start);
|
||||
weechat_log_printf (" command_time. . . . : %ld\n", server->command_time);
|
||||
weechat_log_printf (" reconnect_join. . . : %d\n", server->reconnect_join);
|
||||
weechat_log_printf (" disable_autojoin. . : %d\n", server->disable_autojoin);
|
||||
weechat_log_printf (" is_away . . . . . . : %d\n", server->is_away);
|
||||
|
||||
@@ -172,6 +172,8 @@ struct t_irc_server
|
||||
char *nick_modes; /* nick modes */
|
||||
char *prefix; /* nick prefix allowed (from msg 005) */
|
||||
time_t reconnect_start; /* this time + delay = reconnect time */
|
||||
time_t command_time; /* this time + command_delay = time to */
|
||||
/* autojoin channels */
|
||||
int reconnect_join; /* 1 if channels opened to rejoin */
|
||||
int disable_autojoin; /* 1 if user asked to not autojoin chans */
|
||||
int is_away; /* 1 is user is marked as away */
|
||||
@@ -384,6 +386,7 @@ extern void irc_server_reconnect (t_irc_server *);
|
||||
extern void irc_server_auto_connect (int, int);
|
||||
extern void irc_server_disconnect (t_irc_server *, int);
|
||||
extern void irc_server_disconnect_all ();
|
||||
extern void irc_server_autojoin_channels ();
|
||||
extern t_irc_server *irc_server_search (char *);
|
||||
extern int irc_server_get_number_connected ();
|
||||
extern void irc_server_get_number_buffer (t_irc_server *, int *, int *);
|
||||
|
||||
Reference in New Issue
Block a user