summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-03-01 17:22:09 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-03-01 17:22:09 +0100
commitd3f8706fa77c5430769f7452d172ce834811ee7b (patch)
tree52653900e33247c80583e4e8239a7f36c80457a6
parent7ba3b2f2b0a8503a528c4f37ce932314e6fb44d6 (diff)
Fix: Simplify selecting what to print
The logic before that change was a bit bogus, as it printed stuff which was not expected. Now, things are cleared up: * Without -P, pending todos are always printed * With --deleted, deleted todos are printed * With -D / --done, done todos are printed * With -H / --hidden, hidden todos are printed No option influences the other. Therefore, the --deleted flag had to be added to the CLI. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--bin/domain/imag-todo/src/lib.rs38
-rw-r--r--bin/domain/imag-todo/src/ui.rs11
2 files changed, 30 insertions, 19 deletions
diff --git a/bin/domain/imag-todo/src/lib.rs b/bin/domain/imag-todo/src/lib.rs
index b2007b49..0f52a095 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)
}
}
}
@@ -372,15 +361,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")