summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/irc/irc-command.c51
1 files changed, 25 insertions, 26 deletions
diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c
index 6c5697c29..3790177a4 100644
--- a/src/plugins/irc/irc-command.c
+++ b/src/plugins/irc/irc-command.c
@@ -1368,7 +1368,8 @@ irc_command_quit_server (struct t_irc_server *server, const char *arguments)
*/
int
-irc_command_disconnect_one_server (struct t_irc_server *server)
+irc_command_disconnect_one_server (struct t_irc_server *server,
+ const char *reason)
{
if (!server)
return 0;
@@ -1388,7 +1389,7 @@ irc_command_disconnect_one_server (struct t_irc_server *server)
_("%s: auto-reconnection is cancelled"),
IRC_PLUGIN_NAME);
}
- irc_command_quit_server (server, NULL);
+ irc_command_quit_server (server, reason);
irc_server_disconnect (server, 0, 0);
/* disconnect ok */
@@ -1403,16 +1404,18 @@ int
irc_command_disconnect (void *data, struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol)
{
- int i, disconnect_ok;
+ int disconnect_ok;
+ const char *reason;
IRC_BUFFER_GET_SERVER(buffer);
/* make C compiler happy */
(void) data;
- (void) argv_eol;
+
+ reason = (argc > 2) ? argv_eol[2] : NULL;
if (argc < 2)
- disconnect_ok = irc_command_disconnect_one_server (ptr_server);
+ disconnect_ok = irc_command_disconnect_one_server (ptr_server, reason);
else
{
disconnect_ok = 1;
@@ -1426,29 +1429,26 @@ irc_command_disconnect (void *data, struct t_gui_buffer *buffer, int argc,
|| (ptr_server->hook_fd)
|| (ptr_server->reconnect_start != 0))
{
- if (!irc_command_disconnect_one_server (ptr_server))
+ if (!irc_command_disconnect_one_server (ptr_server, reason))
disconnect_ok = 0;
}
}
}
else
{
- for (i = 1; i < argc; i++)
+ ptr_server = irc_server_search (argv[1]);
+ if (ptr_server)
{
- ptr_server = irc_server_search (argv[i]);
- if (ptr_server)
- {
- if (!irc_command_disconnect_one_server (ptr_server))
- disconnect_ok = 0;
- }
- else
- {
- weechat_printf (NULL,
- _("%s%s: server \"%s\" not found"),
- weechat_prefix ("error"), IRC_PLUGIN_NAME,
- argv[i]);
+ if (!irc_command_disconnect_one_server (ptr_server, reason))
disconnect_ok = 0;
- }
+ }
+ else
+ {
+ weechat_printf (NULL,
+ _("%s%s: server \"%s\" not found"),
+ weechat_prefix ("error"), IRC_PLUGIN_NAME,
+ argv[1]);
+ disconnect_ok = 0;
}
}
}
@@ -4868,13 +4868,12 @@ irc_command_init ()
N_("target: server name"),
NULL, &irc_command_die, NULL);
weechat_hook_command ("disconnect",
- N_("disconnect from IRC server(s)"),
- N_("<server> [<server>...]"
- " || -all"),
+ N_("disconnect from one or all IRC servers"),
+ N_("[<server>|-all [<reason>]]"),
N_("server: server name to disconnect\n"
- " -all: disconnect from all servers"),
- "-all"
- " || %(irc_servers)|%*",
+ " -all: disconnect from all servers\n"
+ "reason: reason for quit"),
+ "%(irc_servers)|-all",
&irc_command_disconnect, NULL);
weechat_hook_command ("halfop",
N_("give channel half-operator status to "