aboutsummaryrefslogtreecommitdiff
path: root/src/model/event.rs
diff options
context:
space:
mode:
authorJoris2022-02-26 18:35:24 +0100
committerJoris2022-02-26 18:35:24 +0100
commit2d80413609130f1c121dcae39a150a27dd9f02ea (patch)
treea8c807b7e95d5049ea43a1757d292b5cb745524b /src/model/event.rs
parent1445e23a26c6581ad0c3f5b5016e47e95d224e9f (diff)
downloadcalendar-2d80413609130f1c121dcae39a150a27dd9f02ea.tar.gz
calendar-2d80413609130f1c121dcae39a150a27dd9f02ea.tar.bz2
calendar-2d80413609130f1c121dcae39a150a27dd9f02ea.zip
Show repeated events
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())