Add parameter to show done habits
This commit is contained in:
parent
e4fc2e8010
commit
00d485c3d3
2 changed files with 50 additions and 9 deletions
|
@ -229,11 +229,14 @@ fn today(rt: &Runtime, future: bool) {
|
||||||
use libimaghabit::error::ResultExt;
|
use libimaghabit::error::ResultExt;
|
||||||
use libimaghabit::error::HabitErrorKind as HEK;
|
use libimaghabit::error::HabitErrorKind as HEK;
|
||||||
|
|
||||||
let future = {
|
let (future, show_done) = {
|
||||||
if !future {
|
if !future {
|
||||||
rt.cli().subcommand_matches("today").unwrap().is_present("today-show-future")
|
let scmd = rt.cli().subcommand_matches("today").unwrap();
|
||||||
|
let futu = scmd.is_present("today-show-future");
|
||||||
|
let done = scmd.is_present("today-done");
|
||||||
|
(futu, done)
|
||||||
} else {
|
} else {
|
||||||
true
|
(true, rt.cli().subcommand_matches("status").unwrap().is_present("status-done"))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let today = ::chrono::offset::Local::today().naive_local();
|
let today = ::chrono::offset::Local::today().naive_local();
|
||||||
|
@ -257,6 +260,8 @@ fn today(rt: &Runtime, future: bool) {
|
||||||
.filter(|h| {
|
.filter(|h| {
|
||||||
let due = h.next_instance_date().map_err_trace_exit_unwrap(1);
|
let due = h.next_instance_date().map_err_trace_exit_unwrap(1);
|
||||||
// today or in future
|
// today or in future
|
||||||
|
debug!("Checking {due:?} == {today:?} or (future = {fut} && {due:?} > {today:?}",
|
||||||
|
due = due, today = today, fut = future);
|
||||||
due.map(|d| d == today || (future && d > today)).unwrap_or(false)
|
due.map(|d| d == today || (future && d > today)).unwrap_or(false)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -266,15 +271,17 @@ fn today(rt: &Runtime, future: bool) {
|
||||||
relevant
|
relevant
|
||||||
};
|
};
|
||||||
|
|
||||||
let any_today_relevant = relevant
|
let any_today_relevant = show_done || relevant
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|h| {
|
.filter(|h| {
|
||||||
let due = h.next_instance_date().map_err_trace_exit_unwrap(1);
|
let due = h.next_instance_date().map_err_trace_exit_unwrap(1);
|
||||||
|
debug!("Checking: {:?} == {:?}", due, today);
|
||||||
due.map(|d| d == today).unwrap_or(false) // relevant today
|
due.map(|d| d == today).unwrap_or(false) // relevant today
|
||||||
})
|
})
|
||||||
.count() == 0;
|
.count() != 0;
|
||||||
|
|
||||||
if any_today_relevant {
|
debug!("Any today relevant = {}", any_today_relevant);
|
||||||
|
if !any_today_relevant {
|
||||||
let n = rt
|
let n = rt
|
||||||
.cli()
|
.cli()
|
||||||
.subcommand_matches("today")
|
.subcommand_matches("today")
|
||||||
|
@ -294,8 +301,14 @@ fn today(rt: &Runtime, future: bool) {
|
||||||
let date = element.next_instance_date().map_err_trace_exit_unwrap(1);
|
let date = element.next_instance_date().map_err_trace_exit_unwrap(1);
|
||||||
let name = element.habit_name().map_err_trace_exit_unwrap(1);
|
let name = element.habit_name().map_err_trace_exit_unwrap(1);
|
||||||
|
|
||||||
if let Some(date) = date { // if there is a date
|
if let Some(date) = date {
|
||||||
info!(" * {date}: {name}", date = date, name = name);
|
let is_done = element
|
||||||
|
.instance_exists_for_date(&date)
|
||||||
|
.map_err_trace_exit_unwrap(1);
|
||||||
|
|
||||||
|
if show_done || !is_done {
|
||||||
|
info!(" * {date}: {name}", date = date, name = name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -323,7 +336,21 @@ fn today(rt: &Runtime, future: bool) {
|
||||||
table.set_titles(Row::new(header));
|
table.set_titles(Row::new(header));
|
||||||
|
|
||||||
let mut empty = true;
|
let mut empty = true;
|
||||||
for (i, e) in relevant.into_iter().enumerate() {
|
for (i, e) in relevant.into_iter()
|
||||||
|
.filter(|habit| {
|
||||||
|
show_done || {
|
||||||
|
habit
|
||||||
|
.next_instance_date()
|
||||||
|
.map_err_trace_exit_unwrap(1)
|
||||||
|
.map(|date| {
|
||||||
|
habit.instance_exists_for_date(&date)
|
||||||
|
.map_err_trace_exit_unwrap(1)
|
||||||
|
})
|
||||||
|
.unwrap_or(false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.enumerate()
|
||||||
|
{
|
||||||
let mut v = vec![format!("{}", i)];
|
let mut v = vec![format!("{}", i)];
|
||||||
let mut list = lister_fn(&e);
|
let mut list = lister_fn(&e);
|
||||||
v.append(&mut list);
|
v.append(&mut list);
|
||||||
|
|
|
@ -24,6 +24,13 @@ pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
|
||||||
.subcommand(SubCommand::with_name("status")
|
.subcommand(SubCommand::with_name("status")
|
||||||
.about("Show the current status. Remind of not-yet-done habits, shows upcoming. Default if no command is passed. Also alias for 'today --future'")
|
.about("Show the current status. Remind of not-yet-done habits, shows upcoming. Default if no command is passed. Also alias for 'today --future'")
|
||||||
.version("0.1")
|
.version("0.1")
|
||||||
|
.arg(Arg::with_name("status-done")
|
||||||
|
.long("done")
|
||||||
|
.short("D")
|
||||||
|
.multiple(false)
|
||||||
|
.required(false)
|
||||||
|
.takes_value(false)
|
||||||
|
.help("Show entries which are done."))
|
||||||
)
|
)
|
||||||
|
|
||||||
.subcommand(SubCommand::with_name("create")
|
.subcommand(SubCommand::with_name("create")
|
||||||
|
@ -139,6 +146,13 @@ pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.value_name("N")
|
.value_name("N")
|
||||||
.help("Show the N next relevant entries. Default = 5"))
|
.help("Show the N next relevant entries. Default = 5"))
|
||||||
|
.arg(Arg::with_name("today-done")
|
||||||
|
.long("done")
|
||||||
|
.short("D")
|
||||||
|
.multiple(false)
|
||||||
|
.required(false)
|
||||||
|
.takes_value(false)
|
||||||
|
.help("Show entries which are done."))
|
||||||
)
|
)
|
||||||
|
|
||||||
.subcommand(SubCommand::with_name("done")
|
.subcommand(SubCommand::with_name("done")
|
||||||
|
|
Loading…
Reference in a new issue