build(deps): updated dependencies and edition to 2024

This commit is contained in:
veeso
2025-03-15 14:15:45 +01:00
parent 8a9ba7745a
commit b0f314837e
46 changed files with 3621 additions and 2835 deletions

View File

@@ -135,7 +135,9 @@ impl SetupActivity {
_ => String::new(),
};
// Prepare text editor
env::set_var("EDITOR", self.config().get_text_editor());
unsafe {
env::set_var("EDITOR", self.config().get_text_editor());
}
let placeholder: String = format!("# Type private SSH key for {username}@{host}\n");
// Put input mode back to normal
if let Err(err) = self.context_mut().terminal().disable_raw_mode() {

View File

@@ -59,7 +59,9 @@ impl SetupActivity {
None => Ok(()),
Some(ctx) => {
// Set editor if config client exists
env::set_var("EDITOR", ctx.config().get_text_editor());
unsafe {
env::set_var("EDITOR", ctx.config().get_text_editor());
}
// Prepare terminal
if let Err(err) = ctx.terminal().disable_raw_mode() {
error!("Failed to disable raw mode: {}", err);

View File

@@ -19,7 +19,7 @@ use tuirealm::listener::EventListenerCfg;
use tuirealm::props::Color;
use tuirealm::{Application, NoUserEvent, Update};
use super::{Activity, Context, ExitReason, CROSSTERM_MAX_POLL};
use super::{Activity, CROSSTERM_MAX_POLL, Context, ExitReason};
use crate::config::themes::Theme;
use crate::system::config_client::ConfigClient;
use crate::system::theme_provider::ThemeProvider;

View File

@@ -103,10 +103,11 @@ impl SetupActivity {
fn config_update(&mut self, msg: ConfigMsg) -> Option<Msg> {
match msg {
ConfigMsg::CheckUpdatesBlurDown => {
assert!(self
.app
.active(&Id::Config(IdConfig::PromptOnFileReplace))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::PromptOnFileReplace))
.is_ok()
);
}
ConfigMsg::CheckUpdatesBlurUp => {
assert!(self.app.active(&Id::Config(IdConfig::HiddenFiles)).is_ok());
@@ -121,49 +122,55 @@ impl SetupActivity {
assert!(self.app.active(&Id::Config(IdConfig::LocalFileFmt)).is_ok());
}
ConfigMsg::GroupDirsBlurUp => {
assert!(self
.app
.active(&Id::Config(IdConfig::PromptOnFileReplace))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::PromptOnFileReplace))
.is_ok()
);
}
ConfigMsg::HiddenFilesBlurDown => {
assert!(self.app.active(&Id::Config(IdConfig::CheckUpdates)).is_ok());
}
ConfigMsg::HiddenFilesBlurUp => {
assert!(self
.app
.active(&Id::Config(IdConfig::DefaultProtocol))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::DefaultProtocol))
.is_ok()
);
}
ConfigMsg::LocalFileFmtBlurDown => {
assert!(self
.app
.active(&Id::Config(IdConfig::RemoteFileFmt))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::RemoteFileFmt))
.is_ok()
);
}
ConfigMsg::LocalFileFmtBlurUp => {
assert!(self.app.active(&Id::Config(IdConfig::GroupDirs)).is_ok());
}
ConfigMsg::NotificationsEnabledBlurDown => {
assert!(self
.app
.active(&Id::Config(IdConfig::NotificationsThreshold))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::NotificationsThreshold))
.is_ok()
);
}
ConfigMsg::NotificationsEnabledBlurUp => {
assert!(self
.app
.active(&Id::Config(IdConfig::RemoteFileFmt))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::RemoteFileFmt))
.is_ok()
);
}
ConfigMsg::NotificationsThresholdBlurDown => {
assert!(self.app.active(&Id::Config(IdConfig::SshConfig)).is_ok());
}
ConfigMsg::NotificationsThresholdBlurUp => {
assert!(self
.app
.active(&Id::Config(IdConfig::NotificationsEnabled))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::NotificationsEnabled))
.is_ok()
);
}
ConfigMsg::PromptOnFileReplaceBlurDown => {
assert!(self.app.active(&Id::Config(IdConfig::GroupDirs)).is_ok());
@@ -172,19 +179,21 @@ impl SetupActivity {
assert!(self.app.active(&Id::Config(IdConfig::CheckUpdates)).is_ok());
}
ConfigMsg::RemoteFileFmtBlurDown => {
assert!(self
.app
.active(&Id::Config(IdConfig::NotificationsEnabled))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::NotificationsEnabled))
.is_ok()
);
}
ConfigMsg::RemoteFileFmtBlurUp => {
assert!(self.app.active(&Id::Config(IdConfig::LocalFileFmt)).is_ok());
}
ConfigMsg::TextEditorBlurDown => {
assert!(self
.app
.active(&Id::Config(IdConfig::DefaultProtocol))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::DefaultProtocol))
.is_ok()
);
}
ConfigMsg::TextEditorBlurUp => {
assert!(self.app.active(&Id::Config(IdConfig::SshConfig)).is_ok());
@@ -193,10 +202,11 @@ impl SetupActivity {
assert!(self.app.active(&Id::Config(IdConfig::TextEditor)).is_ok());
}
ConfigMsg::SshConfigBlurUp => {
assert!(self
.app
.active(&Id::Config(IdConfig::NotificationsThreshold))
.is_ok());
assert!(
self.app
.active(&Id::Config(IdConfig::NotificationsThreshold))
.is_ok()
);
}
ConfigMsg::ConfigChanged => {
self.set_config_changed(true);
@@ -259,10 +269,11 @@ impl SetupActivity {
assert!(self.app.active(&Id::Theme(IdTheme::AuthProtocol)).is_ok());
}
ThemeMsg::AuthBookmarksBlurDown => {
assert!(self
.app
.active(&Id::Theme(IdTheme::AuthRecentHosts))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::AuthRecentHosts))
.is_ok()
);
}
ThemeMsg::AuthBookmarksBlurUp => {
assert!(self.app.active(&Id::Theme(IdTheme::AuthPassword)).is_ok());
@@ -301,10 +312,11 @@ impl SetupActivity {
assert!(self.app.active(&Id::Theme(IdTheme::MiscInfo)).is_ok());
}
ThemeMsg::MiscErrorBlurUp => {
assert!(self
.app
.active(&Id::Theme(IdTheme::AuthRecentHosts))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::AuthRecentHosts))
.is_ok()
);
}
ThemeMsg::MiscInfoBlurDown => {
assert!(self.app.active(&Id::Theme(IdTheme::MiscInput)).is_ok());
@@ -337,88 +349,100 @@ impl SetupActivity {
assert!(self.app.active(&Id::Theme(IdTheme::MiscQuit)).is_ok());
}
ThemeMsg::MiscWarnBlurDown => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerLocalBg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerLocalBg))
.is_ok()
);
}
ThemeMsg::MiscWarnBlurUp => {
assert!(self.app.active(&Id::Theme(IdTheme::MiscSave)).is_ok());
}
ThemeMsg::ExplorerLocalBgBlurDown => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerLocalFg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerLocalFg))
.is_ok()
);
}
ThemeMsg::ExplorerLocalBgBlurUp => {
assert!(self.app.active(&Id::Theme(IdTheme::MiscWarn)).is_ok());
}
ThemeMsg::ExplorerLocalFgBlurDown => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerLocalHg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerLocalHg))
.is_ok()
);
}
ThemeMsg::ExplorerLocalFgBlurUp => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerLocalBg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerLocalBg))
.is_ok()
);
}
ThemeMsg::ExplorerLocalHgBlurDown => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerRemoteBg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerRemoteBg))
.is_ok()
);
}
ThemeMsg::ExplorerLocalHgBlurUp => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerLocalFg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerLocalFg))
.is_ok()
);
}
ThemeMsg::ExplorerRemoteBgBlurDown => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerRemoteFg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerRemoteFg))
.is_ok()
);
}
ThemeMsg::ExplorerRemoteBgBlurUp => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerLocalHg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerLocalHg))
.is_ok()
);
}
ThemeMsg::ExplorerRemoteFgBlurDown => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerRemoteHg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerRemoteHg))
.is_ok()
);
}
ThemeMsg::ExplorerRemoteFgBlurUp => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerRemoteBg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerRemoteBg))
.is_ok()
);
}
ThemeMsg::ExplorerRemoteHgBlurDown => {
assert!(self.app.active(&Id::Theme(IdTheme::ProgBarFull)).is_ok());
}
ThemeMsg::ExplorerRemoteHgBlurUp => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerRemoteFg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerRemoteFg))
.is_ok()
);
}
ThemeMsg::ProgBarFullBlurDown => {
assert!(self.app.active(&Id::Theme(IdTheme::ProgBarPartial)).is_ok());
}
ThemeMsg::ProgBarFullBlurUp => {
assert!(self
.app
.active(&Id::Theme(IdTheme::ExplorerRemoteHg))
.is_ok());
assert!(
self.app
.active(&Id::Theme(IdTheme::ExplorerRemoteHg))
.is_ok()
);
}
ThemeMsg::ProgBarPartialBlurDown => {
assert!(self.app.active(&Id::Theme(IdTheme::LogBg)).is_ok());

View File

@@ -40,14 +40,15 @@ impl SetupActivity {
/// Mount error box
pub(super) fn mount_error<S: AsRef<str>>(&mut self, text: S) {
assert!(self
.app
.remount(
Id::Common(IdCommon::ErrorPopup),
Box::new(components::ErrorPopup::new(text)),
vec![],
)
.is_ok());
assert!(
self.app
.remount(
Id::Common(IdCommon::ErrorPopup),
Box::new(components::ErrorPopup::new(text)),
vec![],
)
.is_ok()
);
assert!(self.app.active(&Id::Common(IdCommon::ErrorPopup)).is_ok());
}
@@ -58,14 +59,15 @@ impl SetupActivity {
/// Mount quit popup
pub(super) fn mount_quit(&mut self) {
assert!(self
.app
.remount(
Id::Common(IdCommon::QuitPopup),
Box::<components::QuitPopup>::default(),
vec![],
)
.is_ok());
assert!(
self.app
.remount(
Id::Common(IdCommon::QuitPopup),
Box::<components::QuitPopup>::default(),
vec![],
)
.is_ok()
);
assert!(self.app.active(&Id::Common(IdCommon::QuitPopup)).is_ok());
}
@@ -76,14 +78,15 @@ impl SetupActivity {
/// Mount save popup
pub(super) fn mount_save_popup(&mut self) {
assert!(self
.app
.remount(
Id::Common(IdCommon::SavePopup),
Box::<components::SavePopup>::default(),
vec![],
)
.is_ok());
assert!(
self.app
.remount(
Id::Common(IdCommon::SavePopup),
Box::<components::SavePopup>::default(),
vec![],
)
.is_ok()
);
assert!(self.app.active(&Id::Common(IdCommon::SavePopup)).is_ok());
}
@@ -94,14 +97,15 @@ impl SetupActivity {
/// Mount help
pub(super) fn mount_help(&mut self) {
assert!(self
.app
.remount(
Id::Common(IdCommon::Keybindings),
Box::<components::Keybindings>::default(),
vec![],
)
.is_ok());
assert!(
self.app
.remount(
Id::Common(IdCommon::Keybindings),
Box::<components::Keybindings>::default(),
vec![],
)
.is_ok()
);
assert!(self.app.active(&Id::Common(IdCommon::Keybindings)).is_ok());
}
@@ -144,93 +148,96 @@ impl SetupActivity {
/// Mount common components
fn mount_commons(&mut self, layout: ViewLayout) {
// Radio tab
assert!(self
.app
.remount(
Id::Common(IdCommon::Header),
Box::new(components::Header::new(layout)),
vec![],
)
.is_ok());
assert!(
self.app
.remount(
Id::Common(IdCommon::Header),
Box::new(components::Header::new(layout)),
vec![],
)
.is_ok()
);
// Footer
assert!(self
.app
.remount(
Id::Common(IdCommon::Footer),
Box::<components::Footer>::default(),
vec![],
)
.is_ok());
assert!(
self.app
.remount(
Id::Common(IdCommon::Footer),
Box::<components::Footer>::default(),
vec![],
)
.is_ok()
);
}
/// Mount global listener
fn mount_global_listener(&mut self) {
assert!(self
.app
.mount(
Id::Common(IdCommon::GlobalListener),
Box::<components::GlobalListener>::default(),
vec![
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Esc,
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(10),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Tab,
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('h'),
modifiers: KeyModifiers::CONTROL,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(1),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('r'),
modifiers: KeyModifiers::CONTROL,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('s'),
modifiers: KeyModifiers::CONTROL,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(4),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(SubEventClause::WindowResize, SubClause::Always)
]
)
.is_ok());
assert!(
self.app
.mount(
Id::Common(IdCommon::GlobalListener),
Box::<components::GlobalListener>::default(),
vec![
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Esc,
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(10),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Tab,
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('h'),
modifiers: KeyModifiers::CONTROL,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(1),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('r'),
modifiers: KeyModifiers::CONTROL,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('s'),
modifiers: KeyModifiers::CONTROL,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(4),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(SubEventClause::WindowResize, SubClause::Always)
]
)
.is_ok()
);
}
/// Returns a sub clause which requires that no popup is mounted in order to be satisfied

View File

@@ -11,8 +11,8 @@ use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::{State, StateValue};
use super::{
components, Context, Id, IdCommon, IdConfig, SetupActivity, ViewLayout, RADIO_PROTOCOL_KUBE,
RADIO_PROTOCOL_WEBDAV,
Context, Id, IdCommon, IdConfig, RADIO_PROTOCOL_KUBE, RADIO_PROTOCOL_WEBDAV, SetupActivity,
ViewLayout, components,
};
use crate::explorer::GroupDirs;
use crate::filetransfer::FileTransferProtocol;
@@ -145,122 +145,133 @@ impl SetupActivity {
// Text editor
let text_editor: String =
String::from(self.config().get_text_editor().as_path().to_string_lossy());
assert!(self
.app
.remount(
Id::Config(IdConfig::TextEditor),
Box::new(components::TextEditor::new(text_editor.as_str())),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::TextEditor),
Box::new(components::TextEditor::new(text_editor.as_str())),
vec![]
)
.is_ok()
);
// Protocol
assert!(self
.app
.remount(
Id::Config(IdConfig::DefaultProtocol),
Box::new(components::DefaultProtocol::new(
self.config().get_default_protocol()
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::DefaultProtocol),
Box::new(components::DefaultProtocol::new(
self.config().get_default_protocol()
)),
vec![]
)
.is_ok()
);
// Hidden files
assert!(self
.app
.remount(
Id::Config(IdConfig::HiddenFiles),
Box::new(components::HiddenFiles::new(
self.config().get_show_hidden_files()
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::HiddenFiles),
Box::new(components::HiddenFiles::new(
self.config().get_show_hidden_files()
)),
vec![]
)
.is_ok()
);
// Updates
assert!(self
.app
.remount(
Id::Config(IdConfig::CheckUpdates),
Box::new(components::CheckUpdates::new(
self.config().get_check_for_updates()
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::CheckUpdates),
Box::new(components::CheckUpdates::new(
self.config().get_check_for_updates()
)),
vec![]
)
.is_ok()
);
// File replace
assert!(self
.app
.remount(
Id::Config(IdConfig::PromptOnFileReplace),
Box::new(components::PromptOnFileReplace::new(
self.config().get_prompt_on_file_replace()
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::PromptOnFileReplace),
Box::new(components::PromptOnFileReplace::new(
self.config().get_prompt_on_file_replace()
)),
vec![]
)
.is_ok()
);
// Group dirs
assert!(self
.app
.remount(
Id::Config(IdConfig::GroupDirs),
Box::new(components::GroupDirs::new(self.config().get_group_dirs())),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::GroupDirs),
Box::new(components::GroupDirs::new(self.config().get_group_dirs())),
vec![]
)
.is_ok()
);
// Local File Fmt
assert!(self
.app
.remount(
Id::Config(IdConfig::LocalFileFmt),
Box::new(components::LocalFileFmt::new(
&self.config().get_local_file_fmt().unwrap_or_default()
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::LocalFileFmt),
Box::new(components::LocalFileFmt::new(
&self.config().get_local_file_fmt().unwrap_or_default()
)),
vec![]
)
.is_ok()
);
// Remote File Fmt
assert!(self
.app
.remount(
Id::Config(IdConfig::RemoteFileFmt),
Box::new(components::RemoteFileFmt::new(
&self.config().get_remote_file_fmt().unwrap_or_default()
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::RemoteFileFmt),
Box::new(components::RemoteFileFmt::new(
&self.config().get_remote_file_fmt().unwrap_or_default()
)),
vec![]
)
.is_ok()
);
// Notifications enabled
assert!(self
.app
.remount(
Id::Config(IdConfig::NotificationsEnabled),
Box::new(components::NotificationsEnabled::new(
self.config().get_notifications()
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::NotificationsEnabled),
Box::new(components::NotificationsEnabled::new(
self.config().get_notifications()
)),
vec![]
)
.is_ok()
);
// Notifications threshold
assert!(self
.app
.remount(
Id::Config(IdConfig::NotificationsThreshold),
Box::new(components::NotificationsThreshold::new(&fmt_bytes(
self.config().get_notification_threshold()
))),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::NotificationsThreshold),
Box::new(components::NotificationsThreshold::new(&fmt_bytes(
self.config().get_notification_threshold()
))),
vec![]
)
.is_ok()
);
// Ssh config
assert!(self
.app
.remount(
Id::Config(IdConfig::SshConfig),
Box::new(components::SshConfig::new(
self.config().get_ssh_config().unwrap_or("")
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Config(IdConfig::SshConfig),
Box::new(components::SshConfig::new(
self.config().get_ssh_config().unwrap_or("")
)),
vec![]
)
.is_ok()
);
}
/// Collect values from input and put them into the configuration

View File

@@ -8,7 +8,7 @@
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::ratatui::widgets::Clear;
use super::{components, Context, Id, IdCommon, IdSsh, SetupActivity, ViewLayout};
use super::{Context, Id, IdCommon, IdSsh, SetupActivity, ViewLayout, components};
use crate::utils::ui::{Popup, Size};
impl SetupActivity {
@@ -74,14 +74,15 @@ impl SetupActivity {
/// Mount delete ssh key component
pub(crate) fn mount_del_ssh_key(&mut self) {
assert!(self
.app
.remount(
Id::Ssh(IdSsh::DelSshKeyPopup),
Box::<components::DelSshKeyPopup>::default(),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Ssh(IdSsh::DelSshKeyPopup),
Box::<components::DelSshKeyPopup>::default(),
vec![]
)
.is_ok()
);
assert!(self.app.active(&Id::Ssh(IdSsh::DelSshKeyPopup)).is_ok());
}
@@ -92,22 +93,24 @@ impl SetupActivity {
/// Mount new ssh key prompt
pub(crate) fn mount_new_ssh_key(&mut self) {
assert!(self
.app
.remount(
Id::Ssh(IdSsh::SshHost),
Box::<components::SshHost>::default(),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Ssh(IdSsh::SshUsername),
Box::<components::SshUsername>::default(),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Ssh(IdSsh::SshHost),
Box::<components::SshHost>::default(),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Ssh(IdSsh::SshUsername),
Box::<components::SshUsername>::default(),
vec![]
)
.is_ok()
);
assert!(self.app.active(&Id::Ssh(IdSsh::SshHost)).is_ok());
}
@@ -127,14 +130,15 @@ impl SetupActivity {
format!("{username} at {addr}")
})
.collect();
assert!(self
.app
.remount(
Id::Ssh(IdSsh::SshKeys),
Box::new(components::SshKeys::new(&keys)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Ssh(IdSsh::SshKeys),
Box::new(components::SshKeys::new(&keys)),
vec![]
)
.is_ok()
);
assert!(self.app.active(&Id::Ssh(IdSsh::SshKeys)).is_ok());
}
}

View File

@@ -7,7 +7,7 @@
// Ext
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use super::{components, Context, Id, IdCommon, IdTheme, SetupActivity, Theme, ViewLayout};
use super::{Context, Id, IdCommon, IdTheme, SetupActivity, Theme, ViewLayout, components};
impl SetupActivity {
// -- view
@@ -242,278 +242,309 @@ impl SetupActivity {
}
fn load_titles(&mut self) {
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthTitle),
Box::<components::AuthTitle>::default(),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscTitle),
Box::<components::MiscTitle>::default(),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::TransferTitle),
Box::<components::TransferTitle>::default(),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::TransferTitle2),
Box::<components::TransferTitle2>::default(),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthTitle),
Box::<components::AuthTitle>::default(),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscTitle),
Box::<components::MiscTitle>::default(),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::TransferTitle),
Box::<components::TransferTitle>::default(),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::TransferTitle2),
Box::<components::TransferTitle2>::default(),
vec![]
)
.is_ok()
);
}
/// Load values from theme into input fields
pub(crate) fn load_styles(&mut self) {
let theme: Theme = self.theme().clone();
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthAddress),
Box::new(components::AuthAddress::new(theme.auth_address)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthBookmarks),
Box::new(components::AuthBookmarks::new(theme.auth_bookmarks)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthPassword),
Box::new(components::AuthPassword::new(theme.auth_password)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthPort),
Box::new(components::AuthPort::new(theme.auth_port)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthProtocol),
Box::new(components::AuthProtocol::new(theme.auth_protocol)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthRecentHosts),
Box::new(components::AuthRecentHosts::new(theme.auth_recents)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::AuthUsername),
Box::new(components::AuthUsername::new(theme.auth_username)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscError),
Box::new(components::MiscError::new(theme.misc_error_dialog)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscInfo),
Box::new(components::MiscInfo::new(theme.misc_info_dialog)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscInput),
Box::new(components::MiscInput::new(theme.misc_input_dialog)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscKeys),
Box::new(components::MiscKeys::new(theme.misc_keys)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscQuit),
Box::new(components::MiscQuit::new(theme.misc_quit_dialog)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscSave),
Box::new(components::MiscSave::new(theme.misc_save_dialog)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::MiscWarn),
Box::new(components::MiscWarn::new(theme.misc_warn_dialog)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ExplorerLocalBg),
Box::new(components::ExplorerLocalBg::new(
theme.transfer_local_explorer_background
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ExplorerLocalFg),
Box::new(components::ExplorerLocalFg::new(
theme.transfer_local_explorer_foreground
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ExplorerLocalHg),
Box::new(components::ExplorerLocalHg::new(
theme.transfer_local_explorer_highlighted
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ExplorerRemoteBg),
Box::new(components::ExplorerRemoteBg::new(
theme.transfer_remote_explorer_background
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ExplorerRemoteFg),
Box::new(components::ExplorerRemoteFg::new(
theme.transfer_remote_explorer_foreground
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ExplorerRemoteHg),
Box::new(components::ExplorerRemoteHg::new(
theme.transfer_remote_explorer_highlighted
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ProgBarFull),
Box::new(components::ProgBarFull::new(
theme.transfer_progress_bar_full
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::ProgBarPartial),
Box::new(components::ProgBarPartial::new(
theme.transfer_progress_bar_partial
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::LogBg),
Box::new(components::LogBg::new(theme.transfer_log_background)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::LogWindow),
Box::new(components::LogWindow::new(theme.transfer_log_window)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::StatusSorting),
Box::new(components::StatusSorting::new(
theme.transfer_status_sorting
)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::StatusHidden),
Box::new(components::StatusHidden::new(theme.transfer_status_hidden)),
vec![]
)
.is_ok());
assert!(self
.app
.remount(
Id::Theme(IdTheme::StatusSync),
Box::new(components::StatusSync::new(
theme.transfer_status_sync_browsing
)),
vec![]
)
.is_ok());
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthAddress),
Box::new(components::AuthAddress::new(theme.auth_address)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthBookmarks),
Box::new(components::AuthBookmarks::new(theme.auth_bookmarks)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthPassword),
Box::new(components::AuthPassword::new(theme.auth_password)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthPort),
Box::new(components::AuthPort::new(theme.auth_port)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthProtocol),
Box::new(components::AuthProtocol::new(theme.auth_protocol)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthRecentHosts),
Box::new(components::AuthRecentHosts::new(theme.auth_recents)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::AuthUsername),
Box::new(components::AuthUsername::new(theme.auth_username)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscError),
Box::new(components::MiscError::new(theme.misc_error_dialog)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscInfo),
Box::new(components::MiscInfo::new(theme.misc_info_dialog)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscInput),
Box::new(components::MiscInput::new(theme.misc_input_dialog)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscKeys),
Box::new(components::MiscKeys::new(theme.misc_keys)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscQuit),
Box::new(components::MiscQuit::new(theme.misc_quit_dialog)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscSave),
Box::new(components::MiscSave::new(theme.misc_save_dialog)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::MiscWarn),
Box::new(components::MiscWarn::new(theme.misc_warn_dialog)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ExplorerLocalBg),
Box::new(components::ExplorerLocalBg::new(
theme.transfer_local_explorer_background
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ExplorerLocalFg),
Box::new(components::ExplorerLocalFg::new(
theme.transfer_local_explorer_foreground
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ExplorerLocalHg),
Box::new(components::ExplorerLocalHg::new(
theme.transfer_local_explorer_highlighted
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ExplorerRemoteBg),
Box::new(components::ExplorerRemoteBg::new(
theme.transfer_remote_explorer_background
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ExplorerRemoteFg),
Box::new(components::ExplorerRemoteFg::new(
theme.transfer_remote_explorer_foreground
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ExplorerRemoteHg),
Box::new(components::ExplorerRemoteHg::new(
theme.transfer_remote_explorer_highlighted
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ProgBarFull),
Box::new(components::ProgBarFull::new(
theme.transfer_progress_bar_full
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::ProgBarPartial),
Box::new(components::ProgBarPartial::new(
theme.transfer_progress_bar_partial
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::LogBg),
Box::new(components::LogBg::new(theme.transfer_log_background)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::LogWindow),
Box::new(components::LogWindow::new(theme.transfer_log_window)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::StatusSorting),
Box::new(components::StatusSorting::new(
theme.transfer_status_sorting
)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::StatusHidden),
Box::new(components::StatusHidden::new(theme.transfer_status_hidden)),
vec![]
)
.is_ok()
);
assert!(
self.app
.remount(
Id::Theme(IdTheme::StatusSync),
Box::new(components::StatusSync::new(
theme.transfer_status_sync_browsing
)),
vec![]
)
.is_ok()
);
}
}