diff --git a/src/funcs.rs b/src/funcs.rs index d255216..56d2d28 100644 --- a/src/funcs.rs +++ b/src/funcs.rs @@ -501,7 +501,15 @@ pub fn run_tui( println!("todo"); } ToolMessage::DisconnectServer => { - println!("todo"); + if let Some(server) = state.servers.get(state.selected_server) { + if let Ok(mut lock) = server.lock() { + lock.action_que.push("disconnect".to_string()); + let _ = state.main_tx.send(ToolMessage::Input(( + 0, + format!("server_remove_confim {}", state.selected_server), + ))); + } + } } ToolMessage::ServerBrokerExit => { state.server_broker_running = false; diff --git a/src/lib.rs b/src/lib.rs index 8958c99..38c2a1d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,7 +11,7 @@ use std::io::{self, BufRead, BufReader, Read, Write}; use std::net::IpAddr; use std::net::TcpStream; use std::path::PathBuf; -use std::process::{Command, Stdio}; +use std::process::{Command, CommandArgs, Stdio}; use std::sync::mpsc::Receiver; use std::sync::{Arc, Mutex, mpsc::Sender, mpsc::channel}; use std::time::Duration; @@ -596,6 +596,21 @@ impl AppState { } }); } + "remove_server" => { + let _ = self.main_tx.send(ToolMessage::DisconnectServer); + } + "server_remove_confim" => { + let args = command_args.unwrap(); + let id = args.trim().parse::().unwrap(); + self.servers.remove(id); + if self.selected_server == id && self.selected_server >= 1 { + let _ = self.main_tx.send(ToolMessage::Output(( + 0, + format!("[success] server {} removed!", self.selected_server), + ))); + self.selected_server = self.selected_server - 1; + } + } "select_server" => { self.prompt.action = Some(ToolMessage::SelectServer); self.prompt.num_responses = 1;