diff options
-rw-r--r-- | bin/domain/imag-todo/src/lib.rs | 44 | ||||
-rw-r--r-- | bin/domain/imag-todo/src/ui.rs | 11 |
2 files changed, 35 insertions, 20 deletions
diff --git a/bin/domain/imag-todo/src/lib.rs b/bin/domain/imag-todo/src/lib.rs index b2007b49..f8611200 100644 --- a/bin/domain/imag-todo/src/lib.rs +++ b/bin/domain/imag-todo/src/lib.rs @@ -159,22 +159,14 @@ impl StatusMatcher { } pub fn is(mut self, s: Status) -> Self { - self.add_is(s); - self - } - - pub fn add_is(&mut self, s: Status) { self.is.push(s); + self } #[allow(clippy::wrong_self_convention)] pub fn is_not(mut self, s: Status) -> Self { - self.add_is_not(s); - self - } - - pub fn add_is_not(&mut self, s: Status) { self.is_not.push(s); + self } pub fn matches(&self, todo: Status) -> bool { @@ -182,10 +174,7 @@ impl StatusMatcher { // On blacklist false } else { - // No whitelist or on whitelist - // or - // Not on blacklist, but whitelist exists and not on it either - self.is.is_empty() || self.is.iter().any(|t| *t == todo) + self.is.iter().any(|t| *t == todo) } } } @@ -327,7 +316,9 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul } }) .and_then_ok(|entry| { - if !rt.output_is_pipe() && (show_hidden || filter_hidden.filter(&entry)?) { + trace!("Processing {}", entry.get_location()); + if (!rt.output_is_pipe() || rt.output_data_pipe()) && (show_hidden || filter_hidden.filter(&entry)?) { + trace!("Printing {}", entry.get_location()); if let Err(e) = viewer.view_entry(&entry, &mut rt.stdout()) { use libimagentryview::error::Error; match e { @@ -345,6 +336,7 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul }; if rt.ids_from_stdin() { + trace!("Getting IDs from stdin"); let iter = rt.ids::<crate::ui::PathProvider>()? .ok_or_else(|| err_msg("No ids supplied"))? .into_iter() @@ -354,6 +346,7 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul process(&rt, matcher, show_hidden, iter) } else { + trace!("Getting IDs from store"); let iter = rt.store().get_todos()? .into_get_iter() .map_inner_ok_or_else(|| err_msg("Did not find one entry")); @@ -372,15 +365,30 @@ fn list(rt: &Runtime) -> Result<()> { let hidden = scmd.map(|s| s.is_present("list-hidden")).unwrap_or(false); let done = scmd.map(|s| s.is_present("list-done")).unwrap_or(false); let nopending = scmd.map(|s| s.is_present("list-nopending")).unwrap_or(true); + let deleted = scmd.map(|s| s.is_present("list-deleted")).unwrap_or(true); trace!("table = {}", table); trace!("hidden = {}", hidden); trace!("done = {}", done); trace!("nopending = {}", nopending); - let mut matcher = StatusMatcher::new(); - if !done { matcher.add_is_not(Status::Done); } - if nopending { matcher.add_is_not(Status::Pending); } + let matcher = { + let mut matcher = if nopending { + StatusMatcher::new().is_not(Status::Pending) + } else { + StatusMatcher::new().is(Status::Pending) + }; + + if done { + matcher = matcher.is(Status::Done) + } + + if deleted { + matcher = matcher.is(Status::Deleted) + } + + matcher + }; // TODO: Support printing as ASCII table list_todos(rt, &matcher, hidden) diff --git a/bin/domain/imag-todo/src/ui.rs b/bin/domain/imag-todo/src/ui.rs index 7d0affd5..1172bb60 100644 --- a/bin/domain/imag-todo/src/ui.rs +++ b/bin/domain/imag-todo/src/ui.rs @@ -116,7 +116,7 @@ pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> { .short("H") .takes_value(false) .required(false) - .help("Print also hidden todos") + .help("Print hidden todos") ) .arg(Arg::with_name("list-done") @@ -124,7 +124,14 @@ pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> { .short("D") .takes_value(false) .required(false) - .help("Print also done todos") + .help("Print done todos") + ) + + .arg(Arg::with_name("list-deleted") + .long("deleted") + .takes_value(false) + .required(false) + .help("Print deleted todos") ) .arg(Arg::with_name("list-nopending") |