diff options
| author | Joris | 2022-02-26 18:35:24 +0100 | 
|---|---|---|
| committer | Joris | 2022-02-26 18:35:24 +0100 | 
| commit | 2d80413609130f1c121dcae39a150a27dd9f02ea (patch) | |
| tree | a8c807b7e95d5049ea43a1757d292b5cb745524b /src/model/event.rs | |
| parent | 1445e23a26c6581ad0c3f5b5016e47e95d224e9f (diff) | |
Show repeated events
Diffstat (limited to 'src/model/event.rs')
| -rw-r--r-- | src/model/event.rs | 20 | 
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()) | 
