diff options
author | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-12-15 11:20:35 -0500 |
---|---|---|
committer | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-12-15 11:20:35 -0500 |
commit | f5902708a6e597064482edfc076248a67882b7c5 (patch) | |
tree | 40e97ad84d157bbc670edb97c328ff988f8c8aa6 /src/io | |
parent | 2b29f8485e95fd3cda434ed472992fff2ee8e7a0 (diff) |
folder view now always prefix file names with a space
- remove horizontal margins in folder view
- move copy/cut methods into separate functions
- change some fields to private
Diffstat (limited to 'src/io')
-rw-r--r-- | src/io/io_worker.rs | 166 |
1 files changed, 82 insertions, 84 deletions
diff --git a/src/io/io_worker.rs b/src/io/io_worker.rs index 58347ee..97af52a 100644 --- a/src/io/io_worker.rs +++ b/src/io/io_worker.rs @@ -117,7 +117,7 @@ impl IOWorkerThread { for (i, path) in self.paths.iter().enumerate() { progress.set_index(i); let _ = tx.send(progress.clone()); - self.recursive_copy( + recursive_copy( path.as_path(), self.dest.as_path(), tx.clone(), @@ -132,52 +132,12 @@ impl IOWorkerThread { )) } - fn recursive_copy( - &self, - src: &path::Path, - dest: &path::Path, - tx: mpsc::Sender<IOWorkerProgress>, - progress: &mut IOWorkerProgress, - ) -> std::io::Result<()> { - let mut dest_buf = dest.to_path_buf(); - if let Some(s) = src.file_name() { - dest_buf.push(s); - } - rename_filename_conflict(&mut dest_buf); - let file_type = fs::symlink_metadata(src)?.file_type(); - if file_type.is_dir() { - fs::create_dir(dest_buf.as_path())?; - for entry in fs::read_dir(src)? { - let entry = entry?; - let entry_path = entry.path(); - self.recursive_copy( - entry_path.as_path(), - dest_buf.as_path(), - tx.clone(), - progress, - )?; - let _ = tx.send(progress.clone()); - } - Ok(()) - } else if file_type.is_file() { - let processed = progress.processed() + fs::copy(src, dest_buf)?; - progress.set_processed(processed); - Ok(()) - } else if file_type.is_symlink() { - let link_path = fs::read_link(src)?; - std::os::unix::fs::symlink(link_path, dest_buf)?; - Ok(()) - } else { - Ok(()) - } - } - fn paste_cut(&self, tx: mpsc::Sender<IOWorkerProgress>) -> std::io::Result<IOWorkerProgress> { let mut progress = IOWorkerProgress::new(self.kind(), 0, self.paths.len(), 0); for (i, path) in self.paths.iter().enumerate() { progress.set_index(i); let _ = tx.send(progress.clone()); - self.recursive_cut( + recursive_cut( path.as_path(), self.dest.as_path(), tx.clone(), @@ -191,55 +151,93 @@ impl IOWorkerThread { progress.processed(), )) } +} - pub fn recursive_cut( - &self, - src: &path::Path, - dest: &path::Path, - tx: mpsc::Sender<IOWorkerProgress>, - progress: &mut IOWorkerProgress, - ) -> std::io::Result<()> { - let mut dest_buf = dest.to_path_buf(); - if let Some(s) = src.file_name() { - dest_buf.push(s); +pub fn recursive_copy( + src: &path::Path, + dest: &path::Path, + tx: mpsc::Sender<IOWorkerProgress>, + progress: &mut IOWorkerProgress, +) -> std::io::Result<()> { + let mut dest_buf = dest.to_path_buf(); + if let Some(s) = src.file_name() { + dest_buf.push(s); + } + rename_filename_conflict(&mut dest_buf); + let file_type = fs::symlink_metadata(src)?.file_type(); + if file_type.is_dir() { + fs::create_dir(dest_buf.as_path())?; + for entry in fs::read_dir(src)? { + let entry = entry?; + let entry_path = entry.path(); + recursive_copy( + entry_path.as_path(), + dest_buf.as_path(), + tx.clone(), + progress, + )?; + let _ = tx.send(progress.clone()); } - rename_filename_conflict(&mut dest_buf); - let metadata = fs::symlink_metadata(src)?; - let file_type = metadata.file_type(); - if file_type.is_dir() { - match fs::rename(src, dest_buf.as_path()) { - Ok(_) => { - let processed = progress.processed() + metadata.len(); - progress.set_processed(processed); - } - Err(_) => { - fs::create_dir(dest_buf.as_path())?; - for entry in fs::read_dir(src)? { - let entry_path = entry?.path(); - self.recursive_cut( - entry_path.as_path(), - dest_buf.as_path(), - tx.clone(), - progress, - )?; - } - fs::remove_dir(src)?; - } - } - } else if file_type.is_file() { - if fs::rename(src, dest_buf.as_path()).is_err() { - fs::copy(src, dest_buf.as_path())?; - fs::remove_file(src)?; + Ok(()) + } else if file_type.is_file() { + let processed = progress.processed() + fs::copy(src, dest_buf)?; + progress.set_processed(processed); + Ok(()) + } else if file_type.is_symlink() { + let link_path = fs::read_link(src)?; + std::os::unix::fs::symlink(link_path, dest_buf)?; + Ok(()) + } else { + Ok(()) + } +} + +pub fn recursive_cut( + src: &path::Path, + dest: &path::Path, + tx: mpsc::Sender<IOWorkerProgress>, + progress: &mut IOWorkerProgress, +) -> std::io::Result<()> { + let mut dest_buf = dest.to_path_buf(); + if let Some(s) = src.file_name() { + dest_buf.push(s); + } + rename_filename_conflict(&mut dest_buf); + let metadata = fs::symlink_metadata(src)?; + let file_type = metadata.file_type(); + if file_type.is_dir() { + match fs::rename(src, dest_buf.as_path()) { + Ok(_) => { let processed = progress.processed() + metadata.len(); progress.set_processed(processed); } - } else if file_type.is_symlink() { - let link_path = fs::read_link(src)?; - std::os::unix::fs::symlink(link_path, dest_buf)?; + Err(_) => { + fs::create_dir(dest_buf.as_path())?; + for entry in fs::read_dir(src)? { + let entry_path = entry?.path(); + recursive_cut( + entry_path.as_path(), + dest_buf.as_path(), + tx.clone(), + progress, + )?; + } + fs::remove_dir(src)?; + } + } + } else if file_type.is_file() { + if fs::rename(src, dest_buf.as_path()).is_err() { + fs::copy(src, dest_buf.as_path())?; fs::remove_file(src)?; let processed = progress.processed() + metadata.len(); progress.set_processed(processed); } - Ok(()) - } + } else if file_type.is_symlink() { + let link_path = fs::read_link(src)?; + std::os::unix::fs::symlink(link_path, dest_buf)?; + fs::remove_file(src)?; + let processed = progress.processed() + metadata.len(); + progress.set_processed(processed); + } + Ok(()) } |