summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/command.c2
-rw-r--r--src/common/weechat.c2
-rw-r--r--src/common/weeconfig.c8
-rw-r--r--src/irc/irc-recv.c4
-rw-r--r--src/irc/irc-server.c6
-rw-r--r--src/irc/irc.h5
6 files changed, 20 insertions, 7 deletions
diff --git a/src/common/command.c b/src/common/command.c
index 23a5226f8..1c2af058c 100644
--- a/src/common/command.c
+++ b/src/common/command.c
@@ -1607,7 +1607,7 @@ weechat_cmd_server (int argc, char **argv)
server.address, server.port, server.password,
server.nick1, server.nick2, server.nick3,
server.username, server.realname,
- server.command, server.autojoin, 1);
+ server.command, 1, server.autojoin, 1);
if (new_server)
{
irc_display_prefix (NULL, PREFIX_INFO);
diff --git a/src/common/weechat.c b/src/common/weechat.c
index 9c0ef260f..c22d8201e 100644
--- a/src/common/weechat.c
+++ b/src/common/weechat.c
@@ -232,7 +232,7 @@ wee_parse_args (int argc, char *argv[])
server_tmp.address, server_tmp.port,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
- NULL, NULL, NULL, server_tmp.autojoin, 1))
+ NULL, NULL, NULL, 0, server_tmp.autojoin, 1))
fprintf (stderr, _("%s unable to create server ('%s'), ignored\n"),
WEECHAT_WARNING, argv[i]);
server_destroy (&server_tmp);
diff --git a/src/common/weeconfig.c b/src/common/weeconfig.c
index 38bf40427..7569b7079 100644
--- a/src/common/weeconfig.c
+++ b/src/common/weeconfig.c
@@ -570,6 +570,10 @@ t_config_option weechat_options_server[] =
N_("first command to run when connected to server"),
OPTION_TYPE_STRING, 0, 0, 0,
"", 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, 3600, 1,
+ 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"),
OPTION_TYPE_STRING, 0, 0, 0,
@@ -814,7 +818,8 @@ config_allocate_server (char *filename, int line_number)
cfg_server.autoconnect, 0, cfg_server.address, cfg_server.port,
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
cfg_server.nick3, cfg_server.username, cfg_server.realname,
- cfg_server.command, cfg_server.autojoin, cfg_server.autorejoin))
+ cfg_server.command, cfg_server.command_delay, cfg_server.autojoin,
+ cfg_server.autorejoin))
{
server_free_all ();
gui_printf (NULL,
@@ -1380,6 +1385,7 @@ config_write (char *config_name)
fprintf (file, "server_realname=%s\n", ptr_server->realname);
fprintf (file, "server_command=%s\n",
(ptr_server->command) ? ptr_server->command : "");
+ fprintf (file, "server_command_delay=%d\n", ptr_server->command_delay);
fprintf (file, "server_autojoin=%s\n",
(ptr_server->autojoin) ? ptr_server->autojoin : "");
fprintf (file, "server_autorejoin=%s\n",
diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c
index c328cbcbc..1edfea76c 100644
--- a/src/irc/irc-recv.c
+++ b/src/irc/irc-recv.c
@@ -1500,7 +1500,11 @@ irc_cmd_recv_004 (t_irc_server *server, char *host, char *arguments)
/* execute command once connected */
if (server->command && server->command[0])
+ {
user_command(server, server->command);
+ if (server->command_delay > 0)
+ sleep (server->command_delay);
+ }
/* autojoin */
if (server->autojoin && server->autojoin[0])
diff --git a/src/irc/irc-server.c b/src/irc/irc-server.c
index b02111cc0..59c03bfa8 100644
--- a/src/irc/irc-server.c
+++ b/src/irc/irc-server.c
@@ -70,6 +70,7 @@ server_init (t_irc_server *server)
server->username = NULL;
server->realname = NULL;
server->command = NULL;
+ server->command_delay = 1;
server->autojoin = NULL;
server->nick = NULL;
server->is_connected = 0;
@@ -292,8 +293,8 @@ server_free_all ()
t_irc_server *
server_new (char *name, int autoconnect, int command_line, char *address,
int port, char *password, char *nick1, char *nick2, char *nick3,
- char *username, char *realname, char *command, char *autojoin,
- int autorejoin)
+ char *username, char *realname, char *command, int command_delay,
+ char *autojoin, int autorejoin)
{
t_irc_server *new_server;
@@ -328,6 +329,7 @@ server_new (char *name, int autoconnect, int command_line, char *address,
(realname) ? strdup (realname) : strdup ("realname");
new_server->command =
(command) ? strdup (command) : NULL;
+ new_server->command_delay = command_delay;
new_server->autojoin =
(autojoin) ? strdup (autojoin) : NULL;
new_server->autorejoin = autorejoin;
diff --git a/src/irc/irc.h b/src/irc/irc.h
index 4f75db621..dbbcce649 100644
--- a/src/irc/irc.h
+++ b/src/irc/irc.h
@@ -126,6 +126,7 @@ struct t_irc_server
char *username; /* user name */
char *realname; /* real name */
char *command; /* command to run once connected */
+ int command_delay; /* delay after execution of command */
char *autojoin; /* channels to automatically join */
int autorejoin; /* auto rejoin channels when kicked */
@@ -214,8 +215,8 @@ extern void server_destroy (t_irc_server *);
extern void server_free (t_irc_server *);
extern void server_free_all ();
extern t_irc_server *server_new (char *, int, int, char *, int, char *, char *,
- char *, char *, char *, char *, char *, char *,
- int);
+ char *, char *, char *, char *, char *, int,
+ char *, int);
extern int server_send (t_irc_server *, char *, int);
extern void server_sendf (t_irc_server *, char *, ...);
extern void server_recv (t_irc_server *);