From 0253b00c61bcd9a8ea694a1670a905a18bb190fb Mon Sep 17 00:00:00 2001 From: xeruf <27jf@pm.me> Date: Wed, 14 Aug 2024 22:12:43 +0300 Subject: [PATCH] feat(tasks): display tracking since for current task --- src/tasks.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/tasks.rs b/src/tasks.rs index 761b652..fab48cd 100644 --- a/src/tasks.rs +++ b/src/tasks.rs @@ -384,13 +384,23 @@ impl Tasks { let mut lock = stdout().lock(); if let Some(t) = self.get_current_task() { let state = t.state_or_default(); + let now = &Timestamp::now(); + let mut tracking_stamp: Option = None; + for elem in + timestamps(self.history.get(&self.sender.pubkey()).into_iter().flatten(), &vec![t.get_id()]) + .map(|(e, o)| e) { + if tracking_stamp.is_some() && elem > now { + break; + } + tracking_stamp = Some(elem.clone()) + } writeln!( lock, - "{} since {} (total tracked time {}m)", - // TODO tracking since, scheduled/planned for + "Tracking since {} (total tracked time {}m) - {} since {}", + tracking_stamp.map_or("?".to_string(), |t| relative_datetimestamp(&t)), + self.time_tracked(*t.get_id()) / 60, state.get_label(), - relative_datetimestamp(&state.time), - self.time_tracked(*t.get_id()) / 60 + relative_datetimestamp(&state.time) )?; writeln!(lock, "{}", t.descriptions().join("\n"))?; } @@ -915,6 +925,7 @@ fn matching_tag_id<'a>(event: &'a Event, ids: &'a Vec<&'a EventId>) -> Option<&' }) } +/// Filters out event timestamps to those that start or stop one of the given events fn timestamps<'a>(events: impl Iterator, ids: &'a Vec<&'a EventId>) -> impl Iterator)> { events.map(|event| (&event.created_at, matching_tag_id(event, ids))) .dedup_by(|(_, e1), (_, e2)| e1 == e2)