This commit is contained in:
2023-06-05 14:43:31 +02:00
parent 5230762190
commit e8e84e8d37
3 changed files with 24 additions and 13 deletions

View File

@ -1,4 +1,10 @@
use std::io::Write;
use chrono::NaiveDate;
use ics::{
properties::{DtStart, Summary},
Event, ICalendar,
};
use serde::Serialize;
use sqlx::{FromRow, SqlitePool};
@ -207,25 +213,22 @@ FROM user_trip WHERE trip_details_id = (SELECT trip_details_id FROM planned_even
}
pub async fn get_ics_feed(db: &SqlitePool) -> String {
let mut res = String::new();
res.push_str("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//rudernlinz.at//Trips//DE\r\nX-WR-CALNAME:Ruderausfahrten\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Vienna\r\nTZURL:http://tzurl.org/zoneinfo-outlook/Europe/Vienna\r\nX-LIC-LOCATION:Europe/Vienna\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE");
let mut calendar = ICalendar::new("2.0", "ics-rs");
let events = PlannedEvent::all(db).await;
for event in events {
res.push_str("\r\nBEGIN:VEVENT");
res.push_str(&format!("\r\nUID:{}@rudernlinz.at", event.id));
res.push_str(&format!(
"\r\nDTSTART;TZID=Europe/Vienna:{}T{}00",
let mut vevent = Event::new(format!("{}@rudernlinz.at", event.id), "19900101T180000");
vevent.push(DtStart::new(format!(
"TZID=Europe/Vienna:{}T{}00",
event.day.replace('-', ""),
event.planned_starting_time.replace(':', "")
));
res.push_str(&format!("\r\nDTSTAMP;TZID=Europe/Vienna:19900101T180000"));
res.push_str(&format!("\r\nSUMMARY:{}", event.name));
res.push_str("\r\nEND:VEVENT");
)));
vevent.push(Summary::new(event.name));
calendar.add_event(vevent);
}
res.push_str("\r\nEND:VCALENDAR");
res
let mut buf = Vec::new();
write!(&mut buf, "{}", calendar).unwrap();
String::from_utf8(buf).unwrap()
}
}