summaryrefslogtreecommitdiffstats
path: root/src/io
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-05-19 21:49:42 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-05-19 21:49:42 -0400
commitde1bf52da99f1e7b61ada433cc2fe37e52deec41 (patch)
tree9b15de5e557e96635bcaee569319434912b2ef1f /src/io
parent365024d024c0a12cbf502dfc893057ad8e425003 (diff)
fix cuts not displaying proper values
- cleanup code
Diffstat (limited to 'src/io')
-rw-r--r--src/io/io_worker.rs50
1 files changed, 23 insertions, 27 deletions
diff --git a/src/io/io_worker.rs b/src/io/io_worker.rs
index 94be744..ae375a6 100644
--- a/src/io/io_worker.rs
+++ b/src/io/io_worker.rs
@@ -110,7 +110,7 @@ impl IoWorkerThread {
self._kind
}
- pub fn start(&self, tx: mpsc::Sender<IoWorkerProgress>) -> std::io::Result<IoWorkerProgress> {
+ pub fn start(&self, tx: mpsc::Sender<IoWorkerProgress>) -> io::Result<IoWorkerProgress> {
match self.kind() {
FileOp::Cut => self.paste_cut(tx),
FileOp::Copy => self.paste_copy(tx),
@@ -148,7 +148,7 @@ impl IoWorkerThread {
Ok((total_files, total_bytes))
}
- fn paste_copy(&self, tx: mpsc::Sender<IoWorkerProgress>) -> std::io::Result<IoWorkerProgress> {
+ fn paste_copy(&self, tx: mpsc::Sender<IoWorkerProgress>) -> io::Result<IoWorkerProgress> {
let (total_files, total_bytes) = self.query_number_of_items()?;
let mut progress = IoWorkerProgress::new(self.kind(), 0, total_files, 0, total_bytes);
for path in self.paths.iter() {
@@ -163,7 +163,7 @@ impl IoWorkerThread {
Ok(progress)
}
- fn paste_cut(&self, tx: mpsc::Sender<IoWorkerProgress>) -> std::io::Result<IoWorkerProgress> {
+ fn paste_cut(&self, tx: mpsc::Sender<IoWorkerProgress>) -> io::Result<IoWorkerProgress> {
let (total_files, total_bytes) = self.query_number_of_items()?;
let mut progress = IoWorkerProgress::new(self.kind(), 0, total_files, 0, total_bytes);
@@ -185,7 +185,7 @@ pub fn recursive_copy(
dest: &path::Path,
tx: mpsc::Sender<IoWorkerProgress>,
progress: &mut IoWorkerProgress,
-) -> std::io::Result<()> {
+) -> io::Result<()> {
let mut dest_buf = dest.to_path_buf();
if let Some(s) = src.file_name() {
dest_buf.push(s);
@@ -226,7 +226,7 @@ pub fn recursive_cut(
dest: &path::Path,
tx: mpsc::Sender<IoWorkerProgress>,
progress: &mut IoWorkerProgress,
-) -> std::io::Result<()> {
+) -> io::Result<()> {
let mut dest_buf = dest.to_path_buf();
if let Some(s) = src.file_name() {
dest_buf.push(s);
@@ -234,13 +234,10 @@ pub fn recursive_cut(
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.bytes_processed() + metadata.len();
- progress.set_bytes_processed(processed);
- }
- Err(_) => {
+
+ match fs::rename(src, dest_buf.as_path()) {
+ Err(e) if e.kind() == io::ErrorKind::Other => {
+ if file_type.is_dir() {
fs::create_dir(dest_buf.as_path())?;
for entry in fs::read_dir(src)? {
let entry_path = entry?.path();
@@ -252,23 +249,22 @@ pub fn recursive_cut(
)?;
}
fs::remove_dir(src)?;
+ } 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.bytes_processed() + metadata.len();
+ progress.set_bytes_processed(processed);
+ progress.set_files_processed(progress.files_processed() + 1);
+ } else {
+ let processed = progress.bytes_processed() + fs::copy(src, dest_buf.as_path())?;
+ fs::remove_file(src)?;
+ progress.set_bytes_processed(processed);
+ progress.set_files_processed(progress.files_processed() + 1);
}
}
- } 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.bytes_processed() + metadata.len();
- progress.set_bytes_processed(processed);
- }
- progress.set_files_processed(progress.files_processed() + 1);
- } 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.bytes_processed() + metadata.len();
- progress.set_bytes_processed(processed);
- progress.set_files_processed(progress.files_processed() + 1);
+ Err(e) => return Err(e),
+ _ => {}
}
Ok(())
}