summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2019-07-01 22:27:57 -0400
committerJiayi Zhao <jeff.no.zhao@gmail.com>2019-07-01 22:28:07 -0400
commit44e79d85b96edf8d52bf99e6eb3b8e2db74d8ee4 (patch)
tree6ad4762efe9c62558079969c5faee1147763e0cd
parentb9a3d876d046c3920ee63c6454fc43a5b9158f35 (diff)
make use of ? operator more
-rw-r--r--src/commands/change_directory.rs4
-rw-r--r--src/commands/file_operations.rs129
-rw-r--r--src/commands/search.rs47
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
}
}