From 2d80413609130f1c121dcae39a150a27dd9f02ea Mon Sep 17 00:00:00 2001 From: Joris Date: Sat, 26 Feb 2022 18:35:24 +0100 Subject: Show repeated events --- src/model/event.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/model/event.rs') diff --git a/src/model/event.rs b/src/model/event.rs index 3765fec..b18d811 100644 --- a/src/model/event.rs +++ b/src/model/event.rs @@ -1,5 +1,6 @@ use chrono::Timelike; use chrono::{NaiveDate, NaiveTime}; +use std::collections::HashMap; use uuid::Uuid; use crate::model::repetition::Repetition; @@ -43,6 +44,25 @@ impl Event { } } +/// Repeated events in an included date range +pub fn repetitions_between( + events: &Vec, + start: NaiveDate, + end: NaiveDate, +) -> HashMap> { + let mut res: HashMap> = HashMap::new(); + + for event in events { + for repetition in event.repetition.as_ref() { + for date in repetition.between(event.date, start, end) { + res.entry(date).or_insert(vec![]).push(event.clone()) + } + } + } + + res +} + pub fn pprint_time(t: NaiveTime) -> String { if t.minute() == 0 { format!("{}h", t.hour()) -- cgit v1.2.3