diff --git a/CHANGELOG.md b/CHANGELOG.md index d6c406a..9488216 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,10 +16,11 @@ ## 0.4.0 -Released on FIXME: date +Released on 27/03/2021 - **New explorer features**: - **Execute** a command pressing `X`. This feature is supported on both local and remote hosts (only SFTP/SCP protocols support this feature). + - **Find**: search for files pressing `F` using wild matches. - Enhancements: - Input fields will now support **"input keys"** (such as moving cursor, DEL, END, HOME, ...) - Improved performance regarding configuration I/O (config client is now shared in the activity context) diff --git a/README.md b/README.md index f13ca28..a073645 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ~ Basically, WinSCP on a terminal ~ Developed by Christian Visintin -Current version: 0.4.0 FIXME: (28/02/2021) +Current version: 0.4.0 (27/03/2021) --- @@ -351,6 +351,7 @@ If left empty, the default formatter syntax will be used: `{NAME:24} {PEX} {USER | `` | Copy file/directory | Copy | | `` | Make directory | Directory | | `` | Delete file (Same as `DEL`) | Erase | +| `` | Search for files (wild match is supported) | Find | | `` | Go to supplied path | Go to | | `` | Show help | Help | | `` | Show info about selected file or directory | Info | @@ -380,7 +381,16 @@ The developer documentation can be found on Rust Docs at match choice { - 0 => Some(password), // Yes - _ => None, // No - }, - _ => None, // No such component + Some(Payload::Unsigned(0)) => Some(password), // Yes + _ => None, // No such component / No }, false => None, }; diff --git a/src/ui/activities/auth_activity/update.rs b/src/ui/activities/auth_activity/update.rs index b10b14e..cf6c6da 100644 --- a/src/ui/activities/auth_activity/update.rs +++ b/src/ui/activities/auth_activity/update.rs @@ -274,14 +274,10 @@ impl AuthActivity { Some(Payload::Text(s)) => s, _ => String::new(), }; - let save_pwd: bool = - match self.view.get_value(COMPONENT_RADIO_BOOKMARK_SAVE_PWD) { - Some(Payload::Unsigned(idx)) => match idx { - 0 => true, - _ => false, - }, - _ => false, - }; + let save_pwd: bool = matches!( + self.view.get_value(COMPONENT_RADIO_BOOKMARK_SAVE_PWD), + Some(Payload::Unsigned(0)) + ); // Save bookmark self.save_bookmark(bookmark_name, save_pwd); // Umount popup diff --git a/src/ui/activities/filetransfer_activity/update.rs b/src/ui/activities/filetransfer_activity/update.rs index 869feb7..cb655f8 100644 --- a/src/ui/activities/filetransfer_activity/update.rs +++ b/src/ui/activities/filetransfer_activity/update.rs @@ -732,16 +732,13 @@ impl FileTransferActivity { { Some(props) => { // Get width - let width: usize = match self + let width: usize = self .context .as_ref() .unwrap() .store .get_unsigned(super::STORAGE_EXPLORER_WIDTH) - { - Some(val) => val, - None => 256, // Default - }; + .unwrap_or(256); let hostname: String = match hostname::get() { Ok(h) => { let hostname: String = h.as_os_str().to_string_lossy().to_string(); @@ -787,16 +784,13 @@ impl FileTransferActivity { { Some(props) => { // Get width - let width: usize = match self + let width: usize = self .context .as_ref() .unwrap() .store .get_unsigned(super::STORAGE_EXPLORER_WIDTH) - { - Some(val) => val, - None => 256, // Default - }; + .unwrap_or(256); let params = self.context.as_ref().unwrap().ft_params.as_ref().unwrap(); let hostname: String = format!( "{}:{} ", @@ -830,16 +824,13 @@ impl FileTransferActivity { match self.view.get_props(super::COMPONENT_LOG_BOX).as_mut() { Some(props) => { // Get width - let width: usize = match self + let width: usize = self .context .as_ref() .unwrap() .store .get_unsigned(super::STORAGE_LOGBOX_WIDTH) - { - Some(val) => val, - None => 256, // Default - }; + .unwrap_or(256); // Make log entries let mut table: TableBuilder = TableBuilder::default(); for (idx, record) in self.log_records.iter().enumerate() { @@ -952,8 +943,8 @@ impl FileTransferActivity { None => None, Some(props) => { let props = props.build(); - let title: String = props.texts.title.clone().unwrap_or(String::new()); - let mut props = PropsBuilder::from(props.clone()); + let title: String = props.texts.title.clone().unwrap_or_default(); + let mut props = PropsBuilder::from(props); // Prepare files let file_texts: Vec = self .found diff --git a/src/ui/activities/setup_activity/view.rs b/src/ui/activities/setup_activity/view.rs index 9b40d98..93c42e9 100644 --- a/src/ui/activities/setup_activity/view.rs +++ b/src/ui/activities/setup_activity/view.rs @@ -703,7 +703,7 @@ impl SetupActivity { .get_props(super::COMPONENT_INPUT_FILE_FMT) .as_mut() { - let file_fmt: String = cli.get_file_fmt().unwrap_or(String::new()); + let file_fmt: String = cli.get_file_fmt().unwrap_or_default(); let props = props.with_value(PropValue::Str(file_fmt)).build(); let _ = self.view.update(super::COMPONENT_INPUT_FILE_FMT, props); } @@ -734,19 +734,13 @@ impl SetupActivity { if let Some(Payload::Unsigned(opt)) = self.view.get_value(super::COMPONENT_RADIO_HIDDEN_FILES) { - let show: bool = match opt { - 0 => true, - _ => false, - }; + let show: bool = matches!(opt, 0); cli.set_show_hidden_files(show); } if let Some(Payload::Unsigned(opt)) = self.view.get_value(super::COMPONENT_RADIO_UPDATES) { - let check: bool = match opt { - 0 => true, - _ => false, - }; + let check: bool = matches!(opt, 0); cli.set_check_for_updates(check); } if let Some(Payload::Text(fmt)) = self.view.get_value(super::COMPONENT_INPUT_FILE_FMT) { diff --git a/src/ui/layout/components/input.rs b/src/ui/layout/components/input.rs index 75efa83..5f86610 100644 --- a/src/ui/layout/components/input.rs +++ b/src/ui/layout/components/input.rs @@ -86,7 +86,7 @@ impl OwnStates { /// /// Delete element at cursor -1; then decrement cursor by 1 pub fn backspace(&mut self) { - if self.cursor > 0 && self.input.len() > 0 { + if self.cursor > 0 && !self.input.is_empty() { self.input.remove(self.cursor - 1); // Decrement cursor self.cursor -= 1; @@ -106,7 +106,7 @@ impl OwnStates { /// /// Increment cursor value by one if possible pub fn incr_cursor(&mut self) { - if self.cursor + 1 <= self.input.len() { + if self.cursor < self.input.len() { self.cursor += 1; } } diff --git a/src/ui/layout/components/radio_group.rs b/src/ui/layout/components/radio_group.rs index 7aa5ef2..9cb74c0 100644 --- a/src/ui/layout/components/radio_group.rs +++ b/src/ui/layout/components/radio_group.rs @@ -79,7 +79,7 @@ impl OwnStates { /// ### make_choices /// /// Set OwnStates choices from a vector of text spans - pub fn make_choices(&mut self, spans: &Vec) { + pub fn make_choices(&mut self, spans: &[TextSpan]) { self.choices = spans.iter().map(|x| x.content.clone()).collect(); } }