fix: properly determine current task state

This commit is contained in:
xeruf 2024-09-23 01:20:24 +02:00
parent 945eb6906a
commit 516acadd4a
1 changed files with 16 additions and 3 deletions

View File

@ -90,12 +90,16 @@ impl Task {
self.description_events().map(|e| &e.content) 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 { pub(crate) fn is_task(&self) -> bool {
self.event.kind == TASK_KIND || self.is_task_kind() ||
self.states().next().is_some() self.states().next().is_some()
} }
fn states(&self) -> impl Iterator<Item=TaskState> + '_ { fn states(&self) -> impl DoubleEndedIterator<Item=TaskState> + '_ {
self.props.iter().filter_map(|event| { self.props.iter().filter_map(|event| {
event.kind.try_into().ok().map(|s| TaskState { event.kind.try_into().ok().map(|s| TaskState {
name: some_non_empty(&event.content), name: some_non_empty(&event.content),
@ -110,7 +114,16 @@ impl Task {
} }
pub(crate) fn state(&self) -> Option<TaskState> { pub(crate) fn state(&self) -> Option<TaskState> {
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 { pub(crate) fn pure_state(&self) -> State {