diff --git a/src/main.rs b/src/main.rs index aa7d2a1..add78ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,7 +38,7 @@ pub struct Args { impl Args { pub fn is_cli(&self) -> bool { - self.stdout | self.non_interactive | self.tree + self.stdout || self.non_interactive || self.tree } } diff --git a/src/todo_list.rs b/src/todo_list.rs index 90476b8..91d68bc 100644 --- a/src/todo_list.rs +++ b/src/todo_list.rs @@ -243,17 +243,18 @@ impl TodoList { todo_list.done.sort(); if read_dependencies { let dependency_path = Self::dependency_parent(filename, is_root); - todo_list.read_dependencies(&dependency_path) + let _ = todo_list.read_dependencies(&dependency_path); } return todo_list } - fn read_dependencies(&mut self, path: &PathBuf) { + fn read_dependencies(&mut self, path: &PathBuf) -> io::Result<()>{ let mut todos = [&mut self.undone.todos, &mut self.done.todos]; for todo in todos.iter_mut().flat_map(|v| v.iter_mut()) { - todo.dependency.read(&path); + todo.dependency.read(&path)?; } + Ok(()) } #[inline] @@ -366,9 +367,7 @@ impl TodoList { } #[cfg(test)] mod tests { - use std::fs::{self, remove_file, remove_dir}; - - use crate::fileio::todo_path; + use std::fs::{self, remove_file}; use super::*; @@ -402,7 +401,7 @@ mod tests { fn test_write() { let mut todo_list = get_todo_list(); let path = PathBuf::from("tests/tmplist"); - todo_list.write(&path, true); + let _ = todo_list.write(&path, true); let contents = fs::read_to_string(&path).expect("Reading file failed :("); let expected = "[1] this todo has prio 1 diff --git a/src/todo_list/todo.rs b/src/todo_list/todo.rs index 02b23c8..207c5a6 100644 --- a/src/todo_list/todo.rs +++ b/src/todo_list/todo.rs @@ -9,7 +9,7 @@ use scanf::sscanf; mod note; mod schedule; mod dependency; -use dependency::TodoDependency; +use dependency::Dependency; use schedule::Schedule; use note::{sha1, open_temp_editor}; @@ -20,7 +20,7 @@ use super::TodoList; pub struct Todo { pub message: String, priority: i8, - pub dependency: TodoDependency, + pub dependency: Dependency, done:bool, removed_names: Vec, schedule: Schedule, @@ -69,8 +69,7 @@ impl TryFrom<&str> for Todo { } _ => return Err(TodoError::ReadFailed), } - let dependency = TodoDependency::from(dependency_string.as_str()); - let dependencies = TodoList::new(); + let dependency = Dependency::from(dependency_string.as_str()); let priority:i8 = match priority_string.parse() { Ok(value) => { @@ -110,7 +109,7 @@ impl Todo { Todo { schedule: Schedule::new(), removed_names: Vec::new(), - dependency: TodoDependency::default(), + dependency: Dependency::default(), message, priority: Todo::fixed_priority(priority), done, @@ -132,10 +131,6 @@ impl Todo { self.dependency.is_none() } - fn todolist_name(name:&String) -> String { - format!("{name}.todo") - } - pub fn remove_note(&mut self) { if self.dependency.is_note() { self.remove_dependency(); @@ -147,7 +142,7 @@ impl Todo { if self.has_todo_dependency() { return Err(TodoError::AlreadyExists) } - self.dependency = TodoDependency::new_todo_list(self.hash()); + self.dependency = Dependency::new_todo_list(self.hash()); Ok(()) } @@ -199,7 +194,7 @@ impl Todo { } pub fn set_note(&mut self, note:String) -> io::Result<()>{ - self.dependency = TodoDependency::new_note(sha1(¬e), note); + self.dependency = Dependency::new_note(sha1(¬e), note); Ok(()) } @@ -313,9 +308,6 @@ impl Todo { #[cfg(test)] mod tests { - use crate::fileio::append_home_dir; - use crate::fileio::note_path; - use super::*; #[test] @@ -335,7 +327,7 @@ mod tests { let expected = Ok(Todo { schedule: Schedule::new(), removed_names: Vec::new(), - dependency:TodoDependency::new_note("2c924e3088204ee77ba681f72be3444357932fca".to_string(), "".to_string()), + dependency:Dependency::new_note("2c924e3088204ee77ba681f72be3444357932fca".to_string(), "".to_string()), message: "Test".to_string(), priority: 1, done: false, @@ -358,26 +350,6 @@ mod tests { assert_eq!(todo.done, false); } - #[test] - fn test_static_dependency_name() { - let name = "my_dep".to_string(); - let expected = "my_dep.todo".to_string(); - - let result = Todo::todolist_name(&name); - - assert_eq!(result, expected); - } - - #[test] - fn test_default_dependency_path() { - let name = "my_dep".to_string(); - let expected = PathBuf::from(append_home_dir(".local/share/calcurse/notes/my_dep.todo")); - - let result = note_path(&Todo::todolist_name(&name), None).unwrap().unwrap(); - - assert_eq!(result, expected); - } - #[test] fn test_dependency_name() { let mut todo = Todo::default("Test".to_string(), 1); @@ -469,7 +441,7 @@ mod tests { let expected = Todo { schedule: Schedule::new(), removed_names: Vec::new(), - dependency: TodoDependency::new_todo_list( "1BE348656D84993A6DF0DB0DECF2E95EF2CF461c".to_string()), + dependency: Dependency::new_todo_list( "1BE348656D84993A6DF0DB0DECF2E95EF2CF461c".to_string()), message: "Read for exams".to_string(), priority: 1, done: false, @@ -484,7 +456,7 @@ mod tests { let expected = Todo { schedule: Schedule::from("DAILY 2023-09-05"), removed_names: Vec::new(), - dependency: TodoDependency::default(), + dependency: Dependency::default(), message: "this one should be daily".to_string(), priority: 2, done: false, @@ -498,7 +470,7 @@ mod tests { #[test] fn test_daily_display() { let test = Todo { - dependency: TodoDependency::default(), + dependency: Dependency::default(), schedule: Schedule::from("DAILY"), removed_names: Vec::new(), message: "this one should be daily".to_string(), @@ -515,7 +487,7 @@ mod tests { let input = "[-2] this one should be daily [D1(2023-09-05)]"; let todo = Todo::try_from(input).unwrap(); let expected = Todo { - dependency: TodoDependency::default(), + dependency: Dependency::default(), schedule: Schedule::from("DAILY 2023-09-05"), removed_names: Vec::new(), message: "this one should be daily".to_string(), @@ -533,7 +505,7 @@ mod tests { let input = "[-2] this one should be daily [D7(2023-09-05)]"; let todo = Todo::try_from(input).unwrap(); let expected = Todo { - dependency: TodoDependency::default(), + dependency: Dependency::default(), schedule: Schedule::from("D7(2023-09-05)"), removed_names: Vec::new(), message: "this one should be daily".to_string(), diff --git a/src/todo_list/todo/dependency.rs b/src/todo_list/todo/dependency.rs index 34a4e88..96b1150 100644 --- a/src/todo_list/todo/dependency.rs +++ b/src/todo_list/todo/dependency.rs @@ -4,7 +4,7 @@ use super::TodoList; use super::Todo; #[derive(Debug, PartialEq, Clone, Default)] -pub enum Mode { +pub enum DependencyMode { #[default] None, TodoList, @@ -12,25 +12,25 @@ pub enum Mode { } #[derive(Debug, PartialEq, Clone, Default)] -pub struct TodoDependency { +pub struct Dependency { name: String, - mode: Mode, + mode: DependencyMode, note: String, pub(crate) todo_list: TodoList, } -impl TodoDependency { +impl Dependency { pub fn default() -> Self { - TodoDependency { - mode: Mode::None, + Dependency { + mode: DependencyMode::None, name: String::new(), note: String::new(), todo_list: TodoList::new(), } } - pub fn new(name: String, mode: Mode) -> Self { - TodoDependency { + pub fn new(name: String, mode: DependencyMode) -> Self { + Dependency { mode, name, note: String::new(), @@ -39,7 +39,7 @@ impl TodoDependency { } pub fn note(&self) -> Option<&String> { - if self.mode == Mode::Note { + if self.mode == DependencyMode::Note { Some(&self.note) } else { None @@ -51,35 +51,38 @@ impl TodoDependency { } pub fn push(&mut self, todo:Todo) { - if self.mode == Mode::TodoList { + if self.mode == DependencyMode::TodoList { self.todo_list.push(todo); } } pub fn new_todo_list(hash: String) -> Self { - TodoDependency::new(format!("{}.todo", hash), Mode::TodoList) + Dependency::new(format!("{}.todo", hash), DependencyMode::TodoList) } pub fn new_note(hash: String, note: String) -> Self { - TodoDependency::new(format!("{}", hash), Mode::Note) + let mut dependency = Dependency::new(format!("{}", hash), DependencyMode::Note); + dependency.note = note; + + dependency } pub fn read(&mut self, path: &PathBuf) -> io::Result<()> { match self.mode { - Mode::Note => { + DependencyMode::Note => { self.note = std::fs::read_to_string(path.join(&self.name))?; } - Mode::TodoList => { + DependencyMode::TodoList => { self.todo_list = TodoList::read(&path.join(&self.name), true, false); } - Mode::None => {} + DependencyMode::None => {} }; Ok(()) } pub fn todo_list(&self) -> Option<&TodoList> { - if self.mode == Mode::TodoList { + if self.mode == DependencyMode::TodoList { Some(&self.todo_list) } else { None @@ -89,12 +92,12 @@ impl TodoDependency { pub fn write(&mut self, path: &PathBuf) -> io::Result<()> { let name = self.name.clone(); match self.mode.clone() { - Mode::TodoList => { + DependencyMode::TodoList => { self.todo_list.write(&path.join(&self.name), false)?; } - Mode::Note => { + DependencyMode::Note => { let mut file = File::create(path.join(name))?; - write!(file, "{}", self.note); + write!(file, "{}", self.note)?; } _ => {} }; @@ -109,28 +112,28 @@ impl TodoDependency { } pub fn is_none(&self) -> bool { - self.mode == Mode::None + self.mode == DependencyMode::None } pub fn is_note(&self) -> bool { - self.mode == Mode::Note + self.mode == DependencyMode::Note } pub fn is_list(&self) -> bool { - self.mode == Mode::TodoList + self.mode == DependencyMode::TodoList } pub fn display<'a>(&self) -> &'a str { match self.mode { - Mode::None => ".", - Mode::Note => ">", - Mode::TodoList => "-", + DependencyMode::None => ".", + DependencyMode::Note => ">", + DependencyMode::TodoList => "-", } } pub fn remove(&mut self) -> Option { let name = match self.mode { - Mode::None => None, + DependencyMode::None => None, _ => Some(self.name.clone()), }; *self = Self::default(); @@ -140,34 +143,34 @@ impl TodoDependency { } -impl Into for &TodoDependency { +impl Into for &Dependency { fn into (self) -> String { match self.mode { - Mode::None => String::new(), + DependencyMode::None => String::new(), _ => format!(">{}", self.name), } } } -impl From<&str> for TodoDependency { - fn from (input: &str) -> TodoDependency { +impl From<&str> for Dependency { + fn from (input: &str) -> Dependency { let mut name = String::new(); - let mode: Mode; + let mode: DependencyMode; match input { _ if sscanf!(input, "{}.todo", name).is_ok() => { - mode = Mode::TodoList; + mode = DependencyMode::TodoList; name = format!("{name}.todo"); } _ if sscanf!(input, "{}", name).is_ok() && !name.is_empty() => { - mode = Mode::Note; + mode = DependencyMode::Note; } _ => { - mode = Mode::None; + mode = DependencyMode::None; } }; - TodoDependency::new(name, mode) + Dependency::new(name, mode) } }