46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
use icalendar;
|
|
use icalendar::{Component, DatePerhapsTime, CalendarDateTime, CalendarComponent};
|
|
use chrono::NaiveDate;
|
|
use crate::EventsCollection;
|
|
use std::fs;
|
|
|
|
fn cdt_as_date(cdt: &CalendarDateTime) -> NaiveDate {
|
|
match cdt {
|
|
CalendarDateTime::Floating(ndt) => ndt.date(),
|
|
CalendarDateTime::Utc(ud) => ud.naive_local().date(),
|
|
CalendarDateTime::WithTimezone{date_time, tzid: _} => date_time.date(),
|
|
}
|
|
}
|
|
|
|
fn as_date(cal_date: &DatePerhapsTime) -> NaiveDate {
|
|
match cal_date {
|
|
DatePerhapsTime::DateTime(cdt) => cdt_as_date(cdt),
|
|
DatePerhapsTime::Date(nd) => nd.clone()
|
|
}
|
|
}
|
|
|
|
fn create_event(events: &mut EventsCollection, event: &icalendar::Event) {
|
|
events.create(as_date(&event.get_start().unwrap()), as_date(&event.get_end().unwrap()).pred_opt().unwrap(), event.get_summary().unwrap());
|
|
}
|
|
|
|
pub fn load_calendar(calendar_path: &std::path::Path, events: &mut EventsCollection) {
|
|
let mut calendar = icalendar::Calendar::new();
|
|
let contents = fs::read_to_string(calendar_path)
|
|
.expect("Could not read the calendar");
|
|
let res = icalendar::parser::read_calendar(&contents);
|
|
match res {
|
|
Ok(parsed_calendar) => { calendar.extend(parsed_calendar.components); }
|
|
Err(e) => println!("{}", e)
|
|
}
|
|
|
|
for cc in calendar.iter() {
|
|
match cc {
|
|
CalendarComponent::Event(event) => create_event(events, event),
|
|
_ => (),
|
|
}
|
|
}
|
|
|
|
events.sort();
|
|
}
|
|
|