44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
use chrono::{Duration, NaiveDate};
|
|
use icalendar::{Alarm, Calendar, Component, Event, EventLike, Property};
|
|
|
|
use crate::trash::TrashType;
|
|
|
|
pub(crate) fn calendar_from_pickup_dates(dates: Vec<(TrashType, NaiveDate)>) -> Calendar {
|
|
let mut ical = Calendar::new();
|
|
ical.name("Twente Milieu Afvalkalender");
|
|
|
|
let events = dates.iter().map(|date| {
|
|
let description = match date.0 {
|
|
TrashType::Grey => "Restafval wordt opgehaald",
|
|
TrashType::Green => "GFT wordt opgehaald",
|
|
TrashType::Paper => "Papier wordt opgehaald",
|
|
TrashType::Packages => "Verpakkingen worden opgehaald",
|
|
};
|
|
|
|
let color = Property::new(
|
|
"COLOR",
|
|
match date.0 {
|
|
TrashType::Grey => "darkgray",
|
|
TrashType::Green => "darkgreen",
|
|
TrashType::Paper => "royalblue",
|
|
TrashType::Packages => "darkorange",
|
|
},
|
|
);
|
|
|
|
let reminder = Alarm::display(description, -Duration::hours(5));
|
|
|
|
Event::new()
|
|
.all_day(date.1)
|
|
.summary(description)
|
|
.append_property(color)
|
|
.alarm(reminder)
|
|
.done()
|
|
});
|
|
|
|
for event in events {
|
|
ical.push(event);
|
|
}
|
|
|
|
ical.done()
|
|
}
|