From 39aebd306664b6dc823b948a3d7e285d25517a61 Mon Sep 17 00:00:00 2001 From: Volodymyr Patuta <6977238-fiplox@users.noreply.gitlab.com> Date: Fri, 27 Nov 2020 15:35:35 +0100 Subject: [PATCH] delete a note --- src/notes.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/notes.rs b/src/notes.rs index 51612f0..cc8a95f 100644 --- a/src/notes.rs +++ b/src/notes.rs @@ -1,6 +1,7 @@ use anyhow::{anyhow, Result}; use chrono::Utc; use std::{env, fs, process::Command}; +use text_io::read; use walkdir::WalkDir; fn get_base_path() -> Result { @@ -52,3 +53,58 @@ fn is_duplicate(header: &str, category: &str) -> Result<()> { } Ok(()) } + +fn find_path(header: &str) -> Result { + let mut paths: Vec = Vec::new(); + let base = get_base_path()?; + for entry in WalkDir::new(base) { + let entry = entry?; + let p: &str = match entry.path().to_str() { + Some(s) => s, + None => "", + }; + let name: &str = match entry.file_name().to_str() { + Some(s) => s, + None => "", + }; + if name == header { + paths.push(String::from(p)); + } + } + if paths.is_empty() { + Err(anyhow!("Note not found.")) + } else { + if paths.len() == 1 { + Ok(paths.remove(0)) + } else { + let mut n: usize; + loop { + let mut i = 1; + println!("Choose one: \n"); + for path in &paths { + println!("{}\t {}", i, path); + i += 1; + } + n = read!(); + if n >= 1 && n <= paths.len() { + break; + } + } + Ok(paths.remove(n)) + } + } +} + +pub fn delete_note(header: &str) -> Result<()> { + let path = find_path(header)?; + println!("Are you sure you want to delete {} [Y/n]", header); + let response: String = read!(); + if response == "y" || response == "Y" || response == "yes" || response == "Yes" { + println!("Deleting..."); + fs::remove_file(path)?; + println!("Successfully deleted."); + Ok(()) + } else { + Err(anyhow!("Abort.")) + } +}