summaryrefslogtreecommitdiffstats
path: root/bin/domain/imag-todo/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'bin/domain/imag-todo/src/lib.rs')
-rw-r--r--bin/domain/imag-todo/src/lib.rs44
1 files changed, 26 insertions, 18 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)