diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/command.c | 117 | ||||
-rw-r--r-- | src/common/session.c | 6 | ||||
-rw-r--r-- | src/common/session.h | 2 | ||||
-rw-r--r-- | src/common/weeconfig.c | 7 |
4 files changed, 111 insertions, 21 deletions
diff --git a/src/common/command.c b/src/common/command.c index 431d6e272..c7895e224 100644 --- a/src/common/command.c +++ b/src/common/command.c @@ -177,10 +177,11 @@ t_weechat_command weechat_commands[] = NULL, 0, 1, 0, weechat_cmd_save, NULL }, { "server", N_("list, add or remove servers"), N_("[list [servername]] | [listfull [servername]] | " - "[servername hostname port [-auto | -noauto] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 " - "nick2 nick3] [-username username] [-realname realname] " - "[-command command] [-autojoin channel[,channel]] ] | " - "[del servername]"), + "[servername hostname port [-auto | -noauto] [-ipv6] [-ssl] " + "[-pwd password] [-nicks nick1 nick2 nick3] [-username username] " + "[-realname realname] [-command command] [-autojoin channel[,channel]] ] | " + "[copy server newservername] [rename servername newservername] [del " + "servername]"), N_(" list: list servers (no parameter implies this list)\n" " listfull: list servers with detailed info for each server\n" "servername: server name, for internal and display use\n" @@ -194,8 +195,10 @@ t_weechat_command weechat_commands[] = " nick3: second alternate nick for server\n" " username: user name\n" " realname: real name of user\n" + " copy: duplicate a server\n" + " rename: rename a server\n" " del: delete a server"), - "del|list|listfull", 0, MAX_ARGS, 0, weechat_cmd_server, NULL }, + "copy|rename|del|list|listfull %S %S", 0, MAX_ARGS, 0, weechat_cmd_server, NULL }, { "set", N_("set config options"), N_("[option [ = value]]"), N_("option: name of an option (if name is full " @@ -3022,22 +3025,112 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel, } else { - if (ascii_strcasecmp (argv[0], "del") == 0) + if (ascii_strcasecmp (argv[0], "copy") == 0) { - if (argc < 2) + if (argc < 3) { irc_display_prefix (NULL, NULL, PREFIX_ERROR); gui_printf (NULL, - _("%s missing servername for \"%s\" command\n"), - WEECHAT_ERROR, "server del"); + _("%s missing server name for \"%s\" command\n"), + WEECHAT_ERROR, "server copy"); + return -1; + } + + /* look for server by name */ + server_found = irc_server_search (argv[1]); + if (!server_found) + { + irc_display_prefix (NULL, NULL, PREFIX_ERROR); + gui_printf (NULL, + _("%s server \"%s\" not found for \"%s\" command\n"), + WEECHAT_ERROR, argv[1], "server copy"); + return -1; + } + + /* check if target name already exists */ + if (irc_server_search (argv[2])) + { + irc_display_prefix (NULL, NULL, PREFIX_ERROR); + gui_printf (NULL, + _("%s server \"%s\" already exists for \"%s\" command\n"), + WEECHAT_ERROR, argv[2], "server copy"); + return -1; + } + + /* duplicate server */ + new_server = irc_server_duplicate (server_found, argv[2]); + if (new_server) + { + irc_display_prefix (NULL, NULL, PREFIX_INFO); + gui_printf (NULL, _("Server %s%s%s has been copied to %s%s\n"), + GUI_COLOR(COLOR_WIN_CHAT_SERVER), + argv[1], + GUI_COLOR(COLOR_WIN_CHAT), + GUI_COLOR(COLOR_WIN_CHAT_SERVER), + argv[2]); + gui_window_redraw_all_buffers (); + return 0; + } + + return -1; + } + if (ascii_strcasecmp (argv[0], "rename") == 0) + { + if (argc < 3) + { + irc_display_prefix (NULL, NULL, PREFIX_ERROR); + gui_printf (NULL, + _("%s missing server name for \"%s\" command\n"), + WEECHAT_ERROR, "server rename"); + return -1; + } + + /* look for server by name */ + server_found = irc_server_search (argv[1]); + if (!server_found) + { + irc_display_prefix (NULL, NULL, PREFIX_ERROR); + gui_printf (NULL, + _("%s server \"%s\" not found for \"%s\" command\n"), + WEECHAT_ERROR, argv[1], "server rename"); + return -1; + } + + /* check if target name already exists */ + if (irc_server_search (argv[2])) + { + irc_display_prefix (NULL, NULL, PREFIX_ERROR); + gui_printf (NULL, + _("%s server \"%s\" already exists for \"%s\" command\n"), + WEECHAT_ERROR, argv[2], "server rename"); return -1; } - if (argc > 2) + + /* rename server */ + if (irc_server_rename (server_found, argv[2])) + { + irc_display_prefix (NULL, NULL, PREFIX_INFO); + gui_printf (NULL, _("Server %s%s%s has been renamed to %s%s\n"), + GUI_COLOR(COLOR_WIN_CHAT_SERVER), + argv[1], + GUI_COLOR(COLOR_WIN_CHAT), + GUI_COLOR(COLOR_WIN_CHAT_SERVER), + argv[2]); + gui_window_redraw_all_buffers (); + return 0; + } + + return -1; + } + else if (ascii_strcasecmp (argv[0], "del") == 0) + { + if (argc < 2) { irc_display_prefix (NULL, NULL, PREFIX_ERROR); gui_printf (NULL, - _("%s too much arguments for \"%s\" command, ignoring arguments\n"), - WEECHAT_WARNING, "server del"); + _("%s missing server name for \"%s\" command\n"), + WEECHAT_ERROR, "server del"); + return -1; } /* look for server by name */ diff --git a/src/common/session.c b/src/common/session.c index 3c7d88625..516a06353 100644 --- a/src/common/session.c +++ b/src/common/session.c @@ -219,7 +219,7 @@ session_save_servers (FILE *file) rc = rc && (session_write_int (file, SESSION_SERV_AUTOCONNECT, ptr_server->autoconnect)); rc = rc && (session_write_int (file, SESSION_SERV_AUTORECONNECT, ptr_server->autoreconnect)); rc = rc && (session_write_int (file, SESSION_SERV_AUTORECONNECT_DELAY, ptr_server->autoreconnect_delay)); - rc = rc && (session_write_int (file, SESSION_SERV_COMMAND_LINE, ptr_server->command_line)); + rc = rc && (session_write_int (file, SESSION_SERV_TEMP_SERVER, ptr_server->temp_server)); rc = rc && (session_write_str (file, SESSION_SERV_ADDRESS, ptr_server->address)); rc = rc && (session_write_int (file, SESSION_SERV_PORT, ptr_server->port)); rc = rc && (session_write_int (file, SESSION_SERV_IPV6, ptr_server->ipv6)); @@ -881,8 +881,8 @@ session_load_server (FILE *file) case SESSION_SERV_AUTORECONNECT_DELAY: rc = rc && (session_read_int (file, &(session_current_server->autoreconnect_delay))); break; - case SESSION_SERV_COMMAND_LINE: - rc = rc && (session_read_int (file, &(session_current_server->command_line))); + case SESSION_SERV_TEMP_SERVER: + rc = rc && (session_read_int (file, &(session_current_server->temp_server))); break; case SESSION_SERV_ADDRESS: rc = rc && (session_read_str (file, &(session_current_server->address))); diff --git a/src/common/session.h b/src/common/session.h index a6efd826e..576ff1c26 100644 --- a/src/common/session.h +++ b/src/common/session.h @@ -54,7 +54,7 @@ enum t_session_server SESSION_SERV_AUTOCONNECT, SESSION_SERV_AUTORECONNECT, SESSION_SERV_AUTORECONNECT_DELAY, - SESSION_SERV_COMMAND_LINE, + SESSION_SERV_TEMP_SERVER, SESSION_SERV_ADDRESS, SESSION_SERV_PORT, SESSION_SERV_IPV6, diff --git a/src/common/weeconfig.c b/src/common/weeconfig.c index 43baeca48..2bde274e9 100644 --- a/src/common/weeconfig.c +++ b/src/common/weeconfig.c @@ -1188,10 +1188,7 @@ config_change_hotlist () void config_change_read_marker () { - t_gui_window *ptr_win; - - for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) - gui_window_redraw_buffer (ptr_win->buffer); + gui_window_redraw_all_buffers (); } /* @@ -2526,7 +2523,7 @@ config_write (char *config_name) for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server) { - if (!ptr_server->command_line) + if (!ptr_server->temp_server) { weechat_iconv_fprintf (file, "\n[server]\n"); weechat_iconv_fprintf (file, "server_name = \"%s\"\n", ptr_server->name); |