diff --git a/src/ui/activities/filetransfer_activity/misc.rs b/src/ui/activities/filetransfer_activity/misc.rs index 0bbbde4..9931519 100644 --- a/src/ui/activities/filetransfer_activity/misc.rs +++ b/src/ui/activities/filetransfer_activity/misc.rs @@ -19,7 +19,16 @@ * */ -use super::{Color, FileTransferActivity, InputField, InputMode, LogLevel, LogRecord, PopupType}; +// Locals +use super::{ + Color, ConfigClient, FileTransferActivity, InputField, InputMode, LogLevel, LogRecord, + PopupType, +}; +use crate::system::environment; +use crate::system::sshkey_storage::SshKeyStorage; +// Ext +use std::env; +use std::path::PathBuf; impl FileTransferActivity { /// ### log @@ -83,4 +92,46 @@ impl FileTransferActivity { InputField::Logs => InputField::Explorer, } } + + /// ### init_config_client + /// + /// Initialize configuration client if possible. + /// This function doesn't return errors. + pub(super) fn init_config_client() -> Option { + match environment::init_config_dir() { + Ok(termscp_dir) => match termscp_dir { + Some(termscp_dir) => { + // Make configuration file path and ssh keys path + let (config_path, ssh_keys_path): (PathBuf, PathBuf) = + environment::get_config_paths(termscp_dir.as_path()); + match ConfigClient::new(config_path.as_path(), ssh_keys_path.as_path()) { + Ok(config_client) => Some(config_client), + Err(_) => None, + } + } + None => None, + }, + Err(_) => None, + } + } + + /// ### make_ssh_storage + /// + /// Make ssh storage from `ConfigClient` if possible, empty otherwise + pub(super) fn make_ssh_storage(cli: Option<&ConfigClient>) -> SshKeyStorage { + match cli { + Some(cli) => SshKeyStorage::storage_from_config(cli), + None => SshKeyStorage::empty(), + } + } + + /// ### setup_text_editor + /// + /// Set text editor to use + pub(super) fn setup_text_editor(&self) { + if let Some(config_cli) = &self.config_cli { + // Set text editor + env::set_var("EDITOR", config_cli.get_text_editor()); + } + } } diff --git a/src/ui/activities/filetransfer_activity/mod.rs b/src/ui/activities/filetransfer_activity/mod.rs index d138fa2..9431699 100644 --- a/src/ui/activities/filetransfer_activity/mod.rs +++ b/src/ui/activities/filetransfer_activity/mod.rs @@ -45,8 +45,6 @@ use crate::filetransfer::sftp_transfer::SftpFileTransfer; use crate::filetransfer::{FileTransfer, FileTransferProtocol}; use crate::fs::FsEntry; use crate::system::config_client::ConfigClient; -use crate::system::environment; -use crate::system::sshkey_storage::SshKeyStorage; // Includes use chrono::{DateTime, Local}; @@ -287,6 +285,7 @@ pub struct FileTransferActivity { context: Option, // Context holder params: FileTransferParams, // FT connection params client: Box, // File transfer client + config_cli: Option, // Config Client local: FileExplorer, // Local File explorer state remote: FileExplorer, // Remote File explorer state tab: FileExplorerTab, // Current selected tab @@ -306,19 +305,22 @@ impl FileTransferActivity { /// Instantiates a new FileTransferActivity pub fn new(params: FileTransferParams) -> FileTransferActivity { let protocol: FileTransferProtocol = params.protocol; + // Get config client + let config_client: Option = Self::init_config_client(); FileTransferActivity { disconnected: false, quit: false, context: None, client: match protocol { FileTransferProtocol::Sftp => { - Box::new(SftpFileTransfer::new(Self::make_ssh_storage())) + Box::new(SftpFileTransfer::new(Self::make_ssh_storage(config_client.as_ref()))) } FileTransferProtocol::Ftp(ftps) => Box::new(FtpFileTransfer::new(ftps)), FileTransferProtocol::Scp => { - Box::new(ScpFileTransfer::new(Self::make_ssh_storage())) + Box::new(ScpFileTransfer::new(Self::make_ssh_storage(config_client.as_ref()))) } }, + config_cli: config_client, params, local: FileExplorer::new(), remote: FileExplorer::new(), @@ -334,27 +336,6 @@ impl FileTransferActivity { } } - /// ### make_ssh_storage - /// - /// Make ssh storage using ConfigClient if possible, otherwise provide an empty storage. - /// This activity doesn't care of errors related to config client. - fn make_ssh_storage() -> SshKeyStorage { - match environment::init_config_dir() { - Ok(termscp_dir) => match termscp_dir { - Some(termscp_dir) => { - // Make configuration file path and ssh keys path - let (config_path, ssh_keys_path): (PathBuf, PathBuf) = - environment::get_config_paths(termscp_dir.as_path()); - match ConfigClient::new(config_path.as_path(), ssh_keys_path.as_path()) { - Ok(config_client) => SshKeyStorage::storage_from_config(&config_client), - Err(_) => SshKeyStorage::empty(), - } - } - None => SshKeyStorage::empty(), - }, - Err(_) => SshKeyStorage::empty(), - } - } } /** @@ -380,6 +361,8 @@ impl Activity for FileTransferActivity { // Get files at current wd self.local_scan(pwd.as_path()); self.local.wrkdir = pwd; + // Configure text editor + self.setup_text_editor(); } /// ### on_draw