From 516acadd4a878791cbc3b6707e09ed04085a4e6c Mon Sep 17 00:00:00 2001 From: xeruf <27jf@pm.me> Date: Mon, 23 Sep 2024 01:20:24 +0200 Subject: [PATCH] fix: properly determine current task state --- src/task.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/task.rs b/src/task.rs index 2f77244..587b88a 100644 --- a/src/task.rs +++ b/src/task.rs @@ -90,12 +90,16 @@ impl Task { self.description_events().map(|e| &e.content) } + pub(crate) fn is_task_kind(&self) -> bool { + self.event.kind == TASK_KIND + } + pub(crate) fn is_task(&self) -> bool { - self.event.kind == TASK_KIND || + self.is_task_kind() || self.states().next().is_some() } - fn states(&self) -> impl Iterator + '_ { + fn states(&self) -> impl DoubleEndedIterator + '_ { self.props.iter().filter_map(|event| { event.kind.try_into().ok().map(|s| TaskState { name: some_non_empty(&event.content), @@ -110,7 +114,16 @@ impl Task { } pub(crate) fn state(&self) -> Option { - self.states().last() + let now = Timestamp::now(); + // TODO do not iterate constructed state objects + let state = self.states().rev().take_while_inclusive(|ts| ts.time > now); + state.last().map(|ts| { + if ts.time <= now { + ts + } else { + self.default_state() + } + }) } pub(crate) fn pure_state(&self) -> State {