From 61f69017671c1806b1a15d1481989c12fb1dbe8e Mon Sep 17 00:00:00 2001 From: veeso Date: Thu, 15 Jul 2021 12:47:47 +0200 Subject: [PATCH] Save both theme and config at the same time --- src/ui/activities/setup/actions.rs | 44 +++++++++++++++++++++++++----- src/ui/activities/setup/update.rs | 24 ++++++++++------ 2 files changed, 52 insertions(+), 16 deletions(-) diff --git a/src/ui/activities/setup/actions.rs b/src/ui/activities/setup/actions.rs index a7bb1c4..7b283de 100644 --- a/src/ui/activities/setup/actions.rs +++ b/src/ui/activities/setup/actions.rs @@ -27,7 +27,7 @@ * SOFTWARE. */ // Locals -use super::SetupActivity; +use super::{SetupActivity, ViewLayout}; // Ext use crate::config::themes::Theme; use crossterm::terminal::{disable_raw_mode, enable_raw_mode}; @@ -36,25 +36,55 @@ use tuirealm::tui::style::Color; use tuirealm::{Payload, Value}; impl SetupActivity { + /// ### action_save_all + /// + /// Save all configurations. If current tab can load values, they will be loaded, otherwise they'll just be saved + pub(super) fn action_save_all(&mut self) -> Result<(), String> { + self.action_save_config()?; + self.action_save_theme() + } + /// ### action_save_config /// /// Save configuration - pub(super) fn action_save_config(&mut self) -> Result<(), String> { - // Collect input values - self.collect_input_values(); + fn action_save_config(&mut self) -> Result<(), String> { + // Collect input values if in setup form + if self.layout == ViewLayout::SetupForm { + self.collect_input_values(); + } self.save_config() } /// ### action_save_theme /// /// Save configuration - pub(super) fn action_save_theme(&mut self) -> Result<(), String> { + fn action_save_theme(&mut self) -> Result<(), String> { + // Collect input values if in theme form + if self.layout == ViewLayout::Theme { + self.collect_styles() + .map_err(|e| format!("'{}' has an invalid color", e))?; + } // save theme - self.collect_styles() - .map_err(|e| format!("'{}' has an invalid color", e))?; self.save_theme() } + /// ### action_change_tab + /// + /// Change view tab and load input values in order not to lose them + pub(super) fn action_change_tab(&mut self, new_tab: ViewLayout) -> Result<(), String> { + // load values for current tab first + match self.layout { + ViewLayout::SetupForm => self.collect_input_values(), + ViewLayout::Theme => self + .collect_styles() + .map_err(|e| format!("'{}' has an invalid color", e))?, + _ => {} + } + // Update view + self.init(new_tab); + Ok(()) + } + /// ### action_reset_config /// /// Reset configuration input fields diff --git a/src/ui/activities/setup/update.rs b/src/ui/activities/setup/update.rs index fc84f2e..53c92a7 100644 --- a/src/ui/activities/setup/update.rs +++ b/src/ui/activities/setup/update.rs @@ -141,7 +141,7 @@ impl SetupActivity { // Exit (COMPONENT_RADIO_QUIT, Msg::OnSubmit(Payload::One(Value::Usize(0)))) => { // Save changes - if let Err(err) = self.action_save_config() { + if let Err(err) = self.action_save_all() { self.mount_error(err.as_str()); } // Exit @@ -170,7 +170,7 @@ impl SetupActivity { // Save popup (COMPONENT_RADIO_SAVE, Msg::OnSubmit(Payload::One(Value::Usize(0)))) => { // Save config - if let Err(err) = self.action_save_config() { + if let Err(err) = self.action_save_all() { self.mount_error(err.as_str()); } self.umount_save_popup(); @@ -190,7 +190,9 @@ impl SetupActivity { } (_, &MSG_KEY_TAB) => { // Change view - self.init(ViewLayout::SshKeys); + if let Err(err) = self.action_change_tab(ViewLayout::SshKeys) { + self.mount_error(err.as_str()); + } None } // Revert changes @@ -234,7 +236,7 @@ impl SetupActivity { // Exit (COMPONENT_RADIO_QUIT, Msg::OnSubmit(Payload::One(Value::Usize(0)))) => { // Save changes - if let Err(err) = self.action_save_config() { + if let Err(err) = self.action_save_all() { self.mount_error(err.as_str()); } // Exit @@ -279,7 +281,7 @@ impl SetupActivity { // Save popup (COMPONENT_RADIO_SAVE, Msg::OnSubmit(Payload::One(Value::Usize(0)))) => { // Save config - if let Err(err) = self.action_save_config() { + if let Err(err) = self.action_save_all() { self.mount_error(err.as_str()); } self.umount_save_popup(); @@ -357,7 +359,9 @@ impl SetupActivity { } (_, &MSG_KEY_TAB) => { // Change view - self.init(ViewLayout::Theme); + if let Err(err) = self.action_change_tab(ViewLayout::Theme) { + self.mount_error(err.as_str()); + } None } // Revert changes @@ -623,7 +627,7 @@ impl SetupActivity { // Exit (COMPONENT_RADIO_QUIT, Msg::OnSubmit(Payload::One(Value::Usize(0)))) => { // Save changes - if let Err(err) = self.action_save_theme() { + if let Err(err) = self.action_save_all() { self.mount_error(err.as_str()); } // Exit @@ -652,7 +656,7 @@ impl SetupActivity { // Save popup (COMPONENT_RADIO_SAVE, Msg::OnSubmit(Payload::One(Value::Usize(0)))) => { // Save config - if let Err(err) = self.action_save_theme() { + if let Err(err) = self.action_save_all() { self.mount_error(err.as_str()); } self.umount_save_popup(); @@ -673,7 +677,9 @@ impl SetupActivity { } (_, &MSG_KEY_TAB) => { // Change view - self.init(ViewLayout::SetupForm); + if let Err(err) = self.action_change_tab(ViewLayout::SetupForm) { + self.mount_error(err.as_str()); + } None } // Revert changes