From 56c4ed9011a9b769fade569d06681367e0e4359a Mon Sep 17 00:00:00 2001 From: fiplox <56274824+fiplox@users.noreply.github.com> Date: Mon, 31 May 2021 20:36:49 +0200 Subject: [PATCH] organize removes Move removes close to each other. Remove category check if directory exists, else it gives an error message before trying to delete. --- src/rnote/notes.rs | 91 +++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/src/rnote/notes.rs b/src/rnote/notes.rs index 0f116f2..cc8a5ad 100644 --- a/src/rnote/notes.rs +++ b/src/rnote/notes.rs @@ -241,13 +241,61 @@ pub fn remove_note(name: &str) -> Result<()> { } pub fn remove_category(category: &str) -> Result<()> { - let path = get_category_path(category)?; + let base = get_base_path()?; + let path = format!("{}{}", base, category); + fs::metadata(&path)?; // check if dir exists, else give error msg. println!("Deleting..."); fs::remove_dir_all(path)?; println!("Successfully deleted."); Ok(()) } +/// Remove all notes created at the given date in format `YYYY-MM-dd`. +pub fn remove_by_date(date: &str) -> Result<()> { + let base = get_base_path()?; + let mut ok: bool = false; + for (_, file) in WalkDir::new(base) + .into_iter() + .filter_map(|file| file.ok()) + .enumerate() + { + if file.metadata()?.is_file() { + let time: DateTime = file.metadata()?.created()?.into(); + if time.format("%Y-%m-%d").to_string() == date { + ok = true; + // TODO: add verbose flag and prompt to delete each file. + fs::remove_file(file.path())?; + } + } + } + if !ok { + return Err(anyhow!("No files with this date found.")); + } + remove_empty_dirs()?; + + Ok(()) +} + +/// Remove empty directories. +fn remove_empty_dirs() -> Result<()> { + let base = get_base_path()?; + for (_, file) in WalkDir::new(base) + .into_iter() + .filter_map(|file| file.ok()) + .enumerate() + { + let is_empty = PathBuf::from(file.path()) + .read_dir() + .map(|mut i| i.next().is_none()) + .unwrap_or(false); + if is_empty { + fs::remove_dir(file.path())?; + } + } + + Ok(()) +} + /// Modify a note. pub fn modify(name: &str) -> Result<()> { let editor = env::var("EDITOR")?; @@ -389,47 +437,6 @@ pub fn list_category(category: &str) -> Result<()> { Ok(()) } -/// Remove all notes created at the given date in format `YYYY-MM-dd`. -pub fn remove_by_date(date: &str) -> Result<()> { - let base = get_base_path()?; - for (_, file) in WalkDir::new(base) - .into_iter() - .filter_map(|file| file.ok()) - .enumerate() - { - if file.metadata()?.is_file() { - let time: DateTime = file.metadata()?.created()?.into(); - if time.format("%Y-%m-%d").to_string() == date { - // TODO: add verbose flag and prompt to delete each file. - fs::remove_file(file.path())?; - } - } - } - remove_empty_dirs()?; - - Ok(()) -} - -/// Remove empty directories. -fn remove_empty_dirs() -> Result<()> { - let base = get_base_path()?; - for (_, file) in WalkDir::new(base) - .into_iter() - .filter_map(|file| file.ok()) - .enumerate() - { - let is_empty = PathBuf::from(file.path()) - .read_dir() - .map(|mut i| i.next().is_none()) - .unwrap_or(false); - if is_empty { - fs::remove_dir(file.path())?; - } - } - - Ok(()) -} - // Make sure to remove rnote directory before tests. #[cfg(test)] mod tests {