diff options
author | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2019-07-01 22:27:57 -0400 |
---|---|---|
committer | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2019-07-01 22:28:07 -0400 |
commit | 44e79d85b96edf8d52bf99e6eb3b8e2db74d8ee4 (patch) | |
tree | 6ad4762efe9c62558079969c5faee1147763e0cd | |
parent | b9a3d876d046c3920ee63c6454fc43a5b9158f35 (diff) |
make use of ? operator more
-rw-r--r-- | src/commands/change_directory.rs | 4 | ||||
-rw-r--r-- | src/commands/file_operations.rs | 129 | ||||
-rw-r--r-- | src/commands/search.rs | 47 |
3 files changed, 74 insertions, 106 deletions
diff --git a/src/commands/change_directory.rs b/src/commands/change_directory.rs index 04c8973..b727055 100644 --- a/src/commands/change_directory.rs +++ b/src/commands/change_directory.rs @@ -1,12 +1,10 @@ use std::path; -use crate::commands; - +use crate::commands::{JoshutoCommand, JoshutoRunnable}; use crate::context::JoshutoContext; use crate::error::JoshutoResult; use crate::history::DirectoryHistory; use crate::window::JoshutoView; -use commands::{JoshutoCommand, JoshutoRunnable}; #[derive(Clone, Debug)] pub struct ChangeDirectory { diff --git a/src/commands/file_operations.rs b/src/commands/file_operations.rs index 9277f60..a701473 100644 --- a/src/commands/file_operations.rs +++ b/src/commands/file_operations.rs @@ -176,99 +176,76 @@ impl PasteFiles { &self, context: &mut JoshutoContext, ) -> std::io::Result<FileOperationThread<u64, fs_extra::TransitProcess>> { + let paths = + SELECTED_FILES.lock().unwrap().take().ok_or_else(|| { + std::io::Error::new(std::io::ErrorKind::Other, "no files selected") + })?; + if paths.is_empty() { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + "no files selected", + )); + } + let tab_src = TAB_SRC.load(atomic::Ordering::SeqCst); let tab_dest = context.curr_tab_index; let destination = context.tabs[tab_dest].curr_path.clone(); let options = self.options.clone(); - let (tx, rx) = mpsc::channel(); - let paths = SELECTED_FILES.lock().unwrap().take(); - match paths { - Some(paths) => { - if paths.is_empty() { - return Err(std::io::Error::new( - std::io::ErrorKind::Other, - "no files selected", - )); - } - - let handle = thread::spawn(move || { - let progress_handle = |process_info: fs_extra::TransitProcess| { - tx.send(process_info); - fs_extra::dir::TransitProcessResult::ContinueOrAbort - }; - fs_extra_extra::fs_cut_with_progress( - &paths, - &destination, - options.clone(), - progress_handle, - ) - }); - - let thread = FileOperationThread { - tab_src, - tab_dest, - handle, - recv: rx, - }; - Ok(thread) - } - None => Err(std::io::Error::new( - std::io::ErrorKind::Other, - "no files selected", - )), - } + let handle = thread::spawn(move || { + let progress_handle = |process_info: fs_extra::TransitProcess| { + tx.send(process_info); + fs_extra::dir::TransitProcessResult::ContinueOrAbort + }; + fs_extra_extra::fs_cut_with_progress(&paths, &destination, options, progress_handle) + }); + + let thread = FileOperationThread { + tab_src, + tab_dest, + handle, + recv: rx, + }; + Ok(thread) } fn copy_paste( &self, context: &mut JoshutoContext, ) -> std::io::Result<FileOperationThread<u64, fs_extra::TransitProcess>> { + let paths = + SELECTED_FILES.lock().unwrap().take().ok_or_else(|| { + std::io::Error::new(std::io::ErrorKind::Other, "no files selected") + })?; + if paths.is_empty() { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + "no files selected", + )); + } + + let tab_src = TAB_SRC.load(atomic::Ordering::SeqCst); let tab_dest = context.curr_tab_index; let destination = context.tabs[tab_dest].curr_path.clone(); - let tab_src = TAB_SRC.load(atomic::Ordering::SeqCst); let options = self.options.clone(); - let (tx, rx) = mpsc::channel(); - - let paths = SELECTED_FILES.lock().unwrap().take(); - match paths { - Some(paths) => { - if paths.is_empty() { - return Err(std::io::Error::new( - std::io::ErrorKind::Other, - "no files selected", - )); - } - - let handle = thread::spawn(move || { - let progress_handle = |process_info: fs_extra::TransitProcess| { - tx.send(process_info); - fs_extra::dir::TransitProcessResult::ContinueOrAbort - }; - fs_extra_extra::fs_copy_with_progress( - &paths, - &destination, - options.clone(), - progress_handle, - ) - }); - - let thread = FileOperationThread { - tab_src, - tab_dest, - handle, - recv: rx, - }; - Ok(thread) - } - None => Err(std::io::Error::new( - std::io::ErrorKind::Other, - "no files selected", - )), - } + let handle = thread::spawn(move || { + let progress_handle = |process_info: fs_extra::TransitProcess| { + tx.send(process_info); + fs_extra::dir::TransitProcessResult::ContinueOrAbort + }; + fs_extra_extra::fs_copy_with_progress(&paths, &destination, options, progress_handle) + }); + + let thread = FileOperationThread { + tab_src, + tab_dest, + handle, + recv: rx, + }; + Ok(thread) } } diff --git a/src/commands/search.rs b/src/commands/search.rs index 4cfd705..9022d82 100644 --- a/src/commands/search.rs +++ b/src/commands/search.rs @@ -27,40 +27,33 @@ impl Search { } pub fn search(curr_tab: &JoshutoTab, pattern: &str) -> Option<usize> { let curr_list = &curr_tab.curr_list; - match curr_list.index { - Some(index) => { - let offset = index + 1; - let contents_len = curr_list.contents.len(); - for i in 0..contents_len { - let file_name_lower = curr_list.contents[(offset + i) % contents_len] - .file_name() - .to_lowercase(); - if file_name_lower.contains(pattern) { - return Some((offset + i) % contents_len); - } - } - None + + let offset = curr_list.index? + 1; + let contents_len = curr_list.contents.len(); + for i in 0..contents_len { + let file_name_lower = curr_list.contents[(offset + i) % contents_len] + .file_name() + .to_lowercase(); + if file_name_lower.contains(pattern) { + return Some((offset + i) % contents_len); } - None => None, } + None } pub fn search_rev(curr_tab: &JoshutoTab, pattern: &str) -> Option<usize> { let curr_list = &curr_tab.curr_list; - match curr_list.index { - Some(offset) => { - let contents_len = curr_list.contents.len(); - for i in (0..contents_len).rev() { - let file_name_lower = curr_list.contents[(offset + i) % contents_len] - .file_name() - .to_lowercase(); - if file_name_lower.contains(pattern) { - return Some((offset + i) % contents_len); - } - } - None + + let offset = curr_list.index?; + let contents_len = curr_list.contents.len(); + for i in (0..contents_len).rev() { + let file_name_lower = curr_list.contents[(offset + i) % contents_len] + .file_name() + .to_lowercase(); + if file_name_lower.contains(pattern) { + return Some((offset + i) % contents_len); } - None => None, } + None } } |