summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNora <nora.widdecke@tu-bs.de>2019-04-26 18:40:47 +0200
committerNora <nora.widdecke@tu-bs.de>2019-04-26 18:40:47 +0200
commitee702ffb77931989c5dfd61f09e682dc7e945e58 (patch)
tree6bddc1d99a8e995043fb77cf54c0e4bff205c294
parentd62653af823f01bdb44a333191430b452b226914 (diff)
use existing timezone when changing dtstart/dtend.
Temporary solution, it should be possible to change timezones
-rw-r--r--src/actions/new.rs40
-rw-r--r--src/icalwrap/icalvcalendar.rs20
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:<<EDIT ME>>
LOCATION:<<EDIT ME>>
- 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
}