FileTransferActivity: load ConfigClient; set text editor to configuration's value

This commit is contained in:
ChristianVisintin
2020-12-24 19:01:42 +01:00
parent 82d8bd0342
commit 96a395615b
2 changed files with 60 additions and 26 deletions

View File

@@ -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 { impl FileTransferActivity {
/// ### log /// ### log
@@ -83,4 +92,46 @@ impl FileTransferActivity {
InputField::Logs => InputField::Explorer, 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<ConfigClient> {
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());
}
}
} }

View File

@@ -45,8 +45,6 @@ use crate::filetransfer::sftp_transfer::SftpFileTransfer;
use crate::filetransfer::{FileTransfer, FileTransferProtocol}; use crate::filetransfer::{FileTransfer, FileTransferProtocol};
use crate::fs::FsEntry; use crate::fs::FsEntry;
use crate::system::config_client::ConfigClient; use crate::system::config_client::ConfigClient;
use crate::system::environment;
use crate::system::sshkey_storage::SshKeyStorage;
// Includes // Includes
use chrono::{DateTime, Local}; use chrono::{DateTime, Local};
@@ -287,6 +285,7 @@ pub struct FileTransferActivity {
context: Option<Context>, // Context holder context: Option<Context>, // Context holder
params: FileTransferParams, // FT connection params params: FileTransferParams, // FT connection params
client: Box<dyn FileTransfer>, // File transfer client client: Box<dyn FileTransfer>, // File transfer client
config_cli: Option<ConfigClient>, // Config Client
local: FileExplorer, // Local File explorer state local: FileExplorer, // Local File explorer state
remote: FileExplorer, // Remote File explorer state remote: FileExplorer, // Remote File explorer state
tab: FileExplorerTab, // Current selected tab tab: FileExplorerTab, // Current selected tab
@@ -306,19 +305,22 @@ impl FileTransferActivity {
/// Instantiates a new FileTransferActivity /// Instantiates a new FileTransferActivity
pub fn new(params: FileTransferParams) -> FileTransferActivity { pub fn new(params: FileTransferParams) -> FileTransferActivity {
let protocol: FileTransferProtocol = params.protocol; let protocol: FileTransferProtocol = params.protocol;
// Get config client
let config_client: Option<ConfigClient> = Self::init_config_client();
FileTransferActivity { FileTransferActivity {
disconnected: false, disconnected: false,
quit: false, quit: false,
context: None, context: None,
client: match protocol { client: match protocol {
FileTransferProtocol::Sftp => { 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::Ftp(ftps) => Box::new(FtpFileTransfer::new(ftps)),
FileTransferProtocol::Scp => { 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, params,
local: FileExplorer::new(), local: FileExplorer::new(),
remote: 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 // Get files at current wd
self.local_scan(pwd.as_path()); self.local_scan(pwd.as_path());
self.local.wrkdir = pwd; self.local.wrkdir = pwd;
// Configure text editor
self.setup_text_editor();
} }
/// ### on_draw /// ### on_draw