Make new file/folder an operation

This commit is contained in:
Jeremy Soller 2024-02-27 13:25:50 -07:00
parent f31f8a0559
commit 01a2e13e56
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
2 changed files with 40 additions and 15 deletions

View file

@ -1,5 +1,5 @@
use cosmic::iced::futures::{channel::mpsc, SinkExt};
use std::path::PathBuf;
use std::{fs, path::PathBuf};
use crate::app::Message;
@ -10,13 +10,29 @@ fn err_str<T: ToString>(err: T) -> String {
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub enum Operation {
/// Copy items
Copy { paths: Vec<PathBuf>, to: PathBuf },
Copy {
paths: Vec<PathBuf>,
to: PathBuf,
},
/// Move items to the trash
Delete { paths: Vec<PathBuf> },
Delete {
paths: Vec<PathBuf>,
},
/// Move items
Move { paths: Vec<PathBuf>, to: PathBuf },
Move {
paths: Vec<PathBuf>,
to: PathBuf,
},
NewFile {
path: PathBuf,
},
NewFolder {
path: PathBuf,
},
/// Restore a path from the trash
Restore { paths: Vec<trash::TrashItem> },
Restore {
paths: Vec<trash::TrashItem>,
},
}
impl Operation {
@ -44,6 +60,20 @@ impl Operation {
.await;
}
}
Self::NewFolder { path } => {
tokio::task::spawn_blocking(|| fs::create_dir(path))
.await
.map_err(err_str)?
.map_err(err_str)?;
let _ = msg_tx.send(Message::PendingProgress(id, 100.0)).await;
}
Self::NewFile { path } => {
tokio::task::spawn_blocking(|| fs::File::create(path))
.await
.map_err(err_str)?
.map_err(err_str)?;
let _ = msg_tx.send(Message::PendingProgress(id, 100.0)).await;
}
Self::Restore { paths } => {
let total = paths.len();
let mut count = 0;