aboutsummaryrefslogtreecommitdiff
path: root/src/model/event.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/model/event.rs')
-rw-r--r--src/model/event.rs20
1 files changed, 20 insertions, 0 deletions
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<Event>,
+ start: NaiveDate,
+ end: NaiveDate,
+) -> HashMap<NaiveDate, Vec<Event>> {
+ let mut res: HashMap<NaiveDate, Vec<Event>> = 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())