From 4082d48b7072d0812b3f5e808443229817e6adbb Mon Sep 17 00:00:00 2001 From: Ishan Arora Date: Mon, 27 Mar 2023 02:13:01 +1300 Subject: [PATCH] Correctly handle timezones in ical See https://github.com/kewisch/ical.js/issues/455#issuecomment-706984325 --- .../ical/get-relevant-events-from-ical.ts | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/app/features/timeline/ical/get-relevant-events-from-ical.ts b/src/app/features/timeline/ical/get-relevant-events-from-ical.ts index a0110ca3c9d..930f7e72473 100644 --- a/src/app/features/timeline/ical/get-relevant-events-from-ical.ts +++ b/src/app/features/timeline/ical/get-relevant-events-from-ical.ts @@ -87,7 +87,21 @@ const convertVEventToTimelineEvent = (vevent: any): TimelineFromCalendarEvent => const getAllPossibleFutureEventsFromIcal = (icalData: string, now: Date): any[] => { const c = ICAL.parse(icalData); const comp = new ICAL.Component(c); - const vevents = comp.getAllSubcomponents('vevent'); + const tzAdded = []; + if (comp.getFirstSubcomponent('vtimezone')) { + for (const vtz of comp.getAllSubcomponents('vtimezone')) { + const tz = new ICAL.Timezone({ + tzid: vtz.getFirstPropertyValue('tzid'), + component: vtz, + }); + + if (!ICAL.TimezoneService.has(tz.tzid)) { + ICAL.TimezoneService.register(tz.tzid, tz); + tzAdded.push(tz.tzid); + } + } + } + const vevents = ICAL.helpers.updateTimezones(comp).getAllSubcomponents('vevent'); const allPossibleFutureEvents = vevents.filter( (ve: any) => @@ -97,5 +111,9 @@ const getAllPossibleFutureEventsFromIcal = (icalData: string, now: Date): any[] ve.getFirstPropertyValue('rrule')?.until?.toJSDate() > now)), ); + for (const tzid of tzAdded) { + ICAL.TimezoneService.remove(tzid); + } + return allPossibleFutureEvents; };