From a843a5a0de5a8757697822d6ed1e65a76be526a4 Mon Sep 17 00:00:00 2001 From: ChristianVisintin Date: Sun, 29 Nov 2020 16:18:50 +0100 Subject: [PATCH] GOTO for remote --- src/ui/activities/filetransfer_activity.rs | 80 ++++++++++++++++++---- 1 file changed, 66 insertions(+), 14 deletions(-) diff --git a/src/ui/activities/filetransfer_activity.rs b/src/ui/activities/filetransfer_activity.rs index 0d9edb9..cdbf9b9 100644 --- a/src/ui/activities/filetransfer_activity.rs +++ b/src/ui/activities/filetransfer_activity.rs @@ -1167,21 +1167,73 @@ impl FileTransferActivity { /// /// Callback for GOTO command fn callback_change_directory(&mut self, input: String) { - match self - .context - .as_mut() - .unwrap() - .local - .change_wrkdir(PathBuf::from(input.as_str())) - { - Err(err) => { - // Report err - self.input_mode = InputMode::Popup(PopupType::Alert( - Color::Red, - format!("Could not change working directory: {}", err), - )); + match self.tab { + FileExplorerTab::Local => { + // Get current directory + let prev_dir: PathBuf = self.context.as_ref().unwrap().local.pwd(); + match self + .context + .as_mut() + .unwrap() + .local + .change_wrkdir(PathBuf::from(input.as_str())) + { + Err(err) => { + // Report err + self.input_mode = InputMode::Popup(PopupType::Alert( + Color::Red, + format!("Could not change working directory: {}", err), + )); + } + Ok(_) => { + // Push previous directory to stack + self.local.pushd(prev_dir.as_path()); + // Update files + self.local.files = self.context.as_ref().unwrap().local.list_dir() + } + } + } + FileExplorerTab::Remote => { + // Get current directory + match self.client.pwd() { + Ok(prev_dir) => { + // Change directory + match self + .client + .change_dir(PathBuf::from(input.as_str()).as_path()) + { + Ok(_) => self.remote.pushd(prev_dir.as_path()), // Push prev_dir to stack + Err(err) => { + // Report err + self.input_mode = InputMode::Popup(PopupType::Alert( + Color::Red, + format!("Could not change working directory: {}", err), + )); + } + } + // Update files + match self + .client + .list_dir(PathBuf::from(input.as_str()).as_path()) + { + Ok(files) => self.remote.files = files, + Err(err) => { + self.input_mode = InputMode::Popup(PopupType::Alert( + Color::Red, + format!("Could not scan remote directory: {}", err), + )); + } + } + } + Err(err) => { + // Report err + self.input_mode = InputMode::Popup(PopupType::Alert( + Color::Red, + format!("Could not change working directory: {}", err), + )); + } + } } - Ok(_) => self.local.files = self.context.as_ref().unwrap().local.list_dir(), // Update files } }