diff --git a/aep-schedule-generator/src/bin/ics.rs b/aep-schedule-generator/src/bin/ics.rs index 07580c1b12b77b4af2129ec5f35ffef29d1498b9..54f27e7463ee11d3c695a143c0dd30fcf10cea50 100644 --- a/aep-schedule-generator/src/bin/ics.rs +++ b/aep-schedule-generator/src/bin/ics.rs @@ -9,7 +9,7 @@ fn main() { let horsage = BufReader::new(File::open("horsage.csv").unwrap()); let fermes = BufReader::new(File::open("fermes.csv").unwrap()); let courses = Courses::from_csv(horsage, fermes); - let courses_to_take = vec!["INF2705", "LOG2990", "MTH2302D", "SSH3201", "SSH3501D"]; + let courses_to_take = vec!["INF2705"]; let mut courses_to_take: Vec<Course> = courses_to_take .into_iter() .map(|sigle| courses.get_course(sigle).unwrap()) diff --git a/aep-schedule-generator/src/icalendar/dates.rs b/aep-schedule-generator/src/icalendar/dates.rs index f1174951b553901da28b1997133709c99e96aae7..f18532626892c4b4a3012e43fc7df1aac6e1701c 100644 --- a/aep-schedule-generator/src/icalendar/dates.rs +++ b/aep-schedule-generator/src/icalendar/dates.rs @@ -1,4 +1,4 @@ -use chrono::{NaiveDate, NaiveDateTime}; +use chrono::NaiveDate; use icalendar::{Calendar, Component, Event, EventLike}; use serde::{Deserialize, Serialize}; @@ -31,48 +31,31 @@ impl Dates { }; let mut main = Event::new(); - main.summary(&format!("{} {}", labo, course.sigle)) .description(p.room.as_str()) .location(p.room.as_str()); match self { Dates::Week(all_dates) => { - let session_start = all_dates[0]; - let start = session_start - .and_hms_opt( - p.hours.starting_hour() as u32, - p.hours.start_minutes() as u32, - 0, - ) - .unwrap(); - let end = session_start - .and_hms_opt(p.hours.last_hour() as u32, p.hours.last_minutes() as u32, 0) - .unwrap(); - - main.starts(start).ends(end); + for date in all_dates { + let mut event = main.clone(); + let start = date + .and_hms_opt( + p.hours.starting_hour() as u32, + p.hours.start_minutes() as u32, + 0, + ) + .unwrap(); + let end = date + .and_hms_opt(p.hours.last_hour() as u32, p.hours.last_minutes() as u32, 0) + .unwrap(); - if all_dates.len() > 1 { - let start_dates: Vec<NaiveDateTime> = all_dates - .into_iter() - .map(|d| { - d.and_hms_opt( - p.hours.starting_hour() as u32, - p.hours.start_minutes() as u32, - 0, - ) - .unwrap() - }) - .collect(); - - let mut rdate = start_dates[0].format(NAIVE_DATE_TIME_FORMAT).to_string(); - for date in start_dates[1..].iter() { - let date = date.format(NAIVE_DATE_TIME_FORMAT); - rdate.push(','); - rdate.push_str(&date.to_string()); - } - - main.add_property("RDATE", &rdate); + event + .starts(start) + .ends(end) + .add_property("CATEGORIES", &course.sigle) + .add_property("RELATED-TO", &course.sigle); + cal.push(event.done()); } } Dates::Weekend { @@ -100,9 +83,8 @@ impl Dates { let rrule = format!("FREQ=WEEKLY;UNTIL={}", last); main.starts(start).ends(end).add_property("RRULE", &rrule); + cal.push(main.done()); } } - - cal.push(main.done()); } } diff --git a/aep-schedule-generator/test.ics b/aep-schedule-generator/test.ics new file mode 100644 index 0000000000000000000000000000000000000000..96812c4844f9caaad737b6ea308a548b492d5bc3 --- /dev/null +++ b/aep-schedule-generator/test.ics @@ -0,0 +1,293 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:ICALENDAR-RS +CALSCALE:GREGORIAN +NAME:horaire +X-WR-CALNAME:horaire +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20240827T113000 +DTSTART:20240827T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:da8ab001-8a1b-4cb0-9d87-0e9770636ec3 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20240903T113000 +DTSTART:20240903T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:801e67ee-7a32-4a50-a406-1da91556d624 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20240910T113000 +DTSTART:20240910T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:3c8d4fec-75e3-4610-a935-8720c117ac47 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20240917T113000 +DTSTART:20240917T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:5a9dd7d9-c8e6-43a0-aa33-29410b93b4ae +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20240924T113000 +DTSTART:20240924T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:3a86c023-6501-4125-b8f4-9b609ccc0223 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241008T113000 +DTSTART:20241008T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:fcca977d-fc64-4f32-9089-220b90413c76 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241022T113000 +DTSTART:20241022T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:de91a14d-61db-4699-8b20-c92a99a8375d +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241029T113000 +DTSTART:20241029T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:c0655929-b204-4150-83f6-aff8cfe7cf7a +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241105T113000 +DTSTART:20241105T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:cde12b7f-36ce-43a4-82cf-bdf04d219dc5 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241112T113000 +DTSTART:20241112T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:8d04f033-f312-4a16-b8e2-868b3b4b528f +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241119T113000 +DTSTART:20241119T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:e8102526-5117-4df5-b397-f650c8ecb262 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241126T113000 +DTSTART:20241126T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:1fce4ddc-d04b-428d-b355-79de2c322d75 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-1710 +DTEND:20241203T113000 +DTSTART:20241203T083000 +LOCATION:L-1710 +RELATED-TO:INF2705 +SUMMARY:Théorie INF2705 +UID:a99f1356-5ac5-425d-9e81-934520ff0eeb +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20240829T164500 +DTSTART:20240829T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:e844b88e-e135-402c-9595-2e38a49e12b6 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20240905T164500 +DTSTART:20240905T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:8188fb8d-ba5a-4670-a1e7-783cd1dc7088 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20240912T164500 +DTSTART:20240912T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:db8e97ad-fe96-458a-bd3c-6fc2293ef51c +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20240919T164500 +DTSTART:20240919T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:8088c939-fed4-47fe-aa7c-0a9c94b2af3d +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20240926T164500 +DTSTART:20240926T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:4d2eb3f8-8a20-4c2c-b9c6-1719340eff9e +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241003T164500 +DTSTART:20241003T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:315fdc8e-fda2-432b-bbfc-113b7c9bd047 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241010T164500 +DTSTART:20241010T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:af72bdc5-aff4-4a58-a8e7-90cfffc5a45e +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241024T164500 +DTSTART:20241024T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:eec8c638-fbf2-4003-b1cd-2d73c7ea2376 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241031T164500 +DTSTART:20241031T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:00659c44-be66-4560-aaf9-4652f8506e98 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241107T164500 +DTSTART:20241107T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:07cfe40b-9970-407d-8220-2b6037d44bcf +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241114T164500 +DTSTART:20241114T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:c488af8e-e2da-4fbf-b798-28346306cdf8 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241121T164500 +DTSTART:20241121T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:cca84986-085f-4570-aaef-1772d91d9c5f +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20240826T025202Z +CATEGORIES:INF2705 +DESCRIPTION:L-4712 +DTEND:20241128T164500 +DTSTART:20241128T134500 +LOCATION:L-4712 +RELATED-TO:INF2705 +SUMMARY:Laboratoire INF2705 +UID:cc64cebb-21c7-46f3-8974-33c10f318952 +END:VEVENT +END:VCALENDAR