From ee702ffb77931989c5dfd61f09e682dc7e945e58 Mon Sep 17 00:00:00 2001 From: Nora Date: Fri, 26 Apr 2019 18:40:47 +0200 Subject: use existing timezone when changing dtstart/dtend. Temporary solution, it should be possible to change timezones --- src/actions/new.rs | 40 ++++++++++++++++++++++++++++++++++------ src/icalwrap/icalvcalendar.rs | 20 ++++++++++++++++++-- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/actions/new.rs b/src/actions/new.rs index f49f478..613f04f 100644 --- a/src/actions/new.rs +++ b/src/actions/new.rs @@ -131,11 +131,26 @@ static TEMPLATE_EVENT: &str = indoc!( BEGIN:VCALENDAR VERSION:2.0 PRODID:-//khaleesi //EN + BEGIN:VTIMEZONE + TZID:Europe/Berlin + BEGIN:STANDARD + DTSTART:19711025T030000 + TZOFFSETFROM:+0200 + TZOFFSETTO:+0100 + RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 + END:STANDARD + BEGIN:DAYLIGHT + DTSTART:19710329T020000 + TZOFFSETFROM:+0100 + TZOFFSETTO:+0200 + RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 + END:DAYLIGHT + END:VTIMEZONE BEGIN:VEVENT SUMMARY:<> LOCATION:<> - DTSTART;VALUE=DATE-TIME:20181026T133000 - DTEND;VALUE=DATE-TIME:20181026T160000 + DTSTART;TZID=Europe/Berlin;VALUE=DATE-TIME:20181026T133000 + DTEND;TZID=Europe/Berlin;VALUE=DATE-TIME:20181026T160000 DTSTAMP;VALUE=DATE-TIME:20181022T145405Z UID:foo END:VEVENT @@ -297,13 +312,26 @@ mod integration { BEGIN:VCALENDAR VERSION:2.0 PRODID:-//khaleesi //EN + BEGIN:VTIMEZONE + TZID:Europe/Berlin + BEGIN:STANDARD + DTSTART:19711025T030000 + TZOFFSETFROM:+0200 + TZOFFSETTO:+0100 + RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 + END:STANDARD + BEGIN:DAYLIGHT + DTSTART:19710329T020000 + TZOFFSETFROM:+0100 + TZOFFSETTO:+0200 + RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 + END:DAYLIGHT + END:VTIMEZONE BEGIN:VEVENT SUMMARY:summary text LOCATION:location text - DTSTART;TZID=/freeassociation.sourceforge.net/Europe/Berlin: - 20171103T123000 - DTEND;TZID=/freeassociation.sourceforge.net/Europe/Berlin: - 20171107T111100 + DTSTART;TZID=Europe/Berlin:20171103T123000 + DTEND;TZID=Europe/Berlin:20171107T111100 DTSTAMP:20130101T010203Z UID:11111111-2222-3333-4444-444444444444@khaleesi LAST-MODIFIED:20130101T010203Z diff --git a/src/icalwrap/icalvcalendar.rs b/src/icalwrap/icalvcalendar.rs index bc4066d..1c64b9b 100644 --- a/src/icalwrap/icalvcalendar.rs +++ b/src/icalwrap/icalvcalendar.rs @@ -141,7 +141,15 @@ impl IcalVCalendar { pub fn with_dtstart(self, dtstart: &IcalTime) -> Self { let event = self.get_principal_event(); unsafe { - ical::icalcomponent_set_dtstart(event.get_ptr(), **dtstart); + let timezone = event.get_dtstart().and_then(|x| x.get_timezone()); + match timezone { + Some(timezone) => { + ical::icalcomponent_set_dtstart(event.get_ptr(), *dtstart.with_timezone(&timezone)); + }, + None => { + ical::icalcomponent_set_dtstart(event.get_ptr(), **dtstart); + } + } } self } @@ -149,7 +157,15 @@ impl IcalVCalendar { pub fn with_dtend(self, dtend: &IcalTime) -> Self { let event = self.get_principal_event(); unsafe { - ical::icalcomponent_set_dtend(event.get_ptr(), **dtend); + let timezone = event.get_dtend().and_then(|x| x.get_timezone()); + match timezone { + Some(timezone) => { + ical::icalcomponent_set_dtend(event.get_ptr(), *dtend.with_timezone(&timezone)); + }, + None => { + ical::icalcomponent_set_dtend(event.get_ptr(), **dtend); + } + } } self } -- cgit v1.2.3