From efa9b7de03b442ae79418a4cbabb16d661a34619 Mon Sep 17 00:00:00 2001 From: Joscha Date: Mon, 6 Dec 2021 14:33:22 +0000 Subject: [PATCH] Sort all entries after evaluation --- src/eval.rs | 14 +++++++++++++- src/eval/command.rs | 15 +++++---------- src/eval/date.rs | 2 +- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/eval.rs b/src/eval.rs index aefd33c..1d55b55 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -1,6 +1,7 @@ use crate::files::Files; use self::command::CommandState; +use self::date::Dates; use self::entry::Entries; pub use self::entry::{Entry, EntryKind, EntryMode}; pub use self::error::{Error, Result}; @@ -22,6 +23,17 @@ impl Files { entries.add(entry); } } - Ok(entries.entries()) + let mut entries = entries.entries(); + entries.sort_by_key(|e| { + e.dates.map(|d| { + let (start, end) = d.start_end(); + if let Some((start_time, end_time)) = d.start_end_time() { + (start, Some(start_time), end, Some(end_time)) + } else { + (start, None, end, None) + } + }) + }); + Ok(entries) } } diff --git a/src/eval/command.rs b/src/eval/command.rs index 55b8e5f..c514b27 100644 --- a/src/eval/command.rs +++ b/src/eval/command.rs @@ -44,16 +44,11 @@ impl<'a> CommandState<'a> { Ok(self) } - pub fn entries(mut self) -> Vec { - let mut keys = self.dated.keys().copied().collect::>(); - keys.sort(); - - let mut entries = self.undated; - for key in keys { - entries.push(self.dated.remove(&key).unwrap()); - } - - entries + pub fn entries(self) -> Vec { + self.undated + .into_iter() + .chain(self.dated.into_values()) + .collect() } // Helper functions diff --git a/src/eval/date.rs b/src/eval/date.rs index 15ddf6d..5872e7b 100644 --- a/src/eval/date.rs +++ b/src/eval/date.rs @@ -78,7 +78,7 @@ impl Dates { self.times.map(|times| times.other) } - fn start_end(&self) -> (NaiveDate, NaiveDate) { + pub fn start_end(&self) -> (NaiveDate, NaiveDate) { if self.root <= self.other { (self.root, self.other) } else {