forked from ryanmwangi/CalMerger
fix: ensure accurate TZID inclusion in DTSTART/DTEND- Preserve TZID only when explicitly included in source calendar. - Added a helper function `hasTZID` to check for explicit TZID in raw properties.- Adjusted datetime processing logic in `processDateTimeProperty` to streamline handling of various cases.
This commit is contained in:
parent
379a79617b
commit
fab6753c5a
|
@ -26,6 +26,30 @@ export async function fetchCalendarData(calendar) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper function to check if TZID exists in the raw property string
|
||||||
|
function hasTZID(rawProperty) {
|
||||||
|
return rawProperty.includes('TZID=');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to process DTSTART/DTEND
|
||||||
|
function processDateTimeProperty(event, propertyName, newEvent) {
|
||||||
|
const rawProperty = event.getFirstProperty(propertyName)?.toICALString();
|
||||||
|
if (!rawProperty) return;
|
||||||
|
|
||||||
|
const dateTime = event.getFirstPropertyValue(propertyName);
|
||||||
|
const dateTimeString = dateTime.toString();
|
||||||
|
|
||||||
|
const property = new ICAL.Property(propertyName, newEvent);
|
||||||
|
property.setValue(dateTimeString);
|
||||||
|
|
||||||
|
if (hasTZID(rawProperty)) {
|
||||||
|
// If raw property includes TZID, add it
|
||||||
|
property.setParameter('TZID', dateTime.zone.tzid);
|
||||||
|
}
|
||||||
|
|
||||||
|
newEvent.addProperty(property);
|
||||||
|
}
|
||||||
|
|
||||||
// Create a top-level VCALENDAR component
|
// Create a top-level VCALENDAR component
|
||||||
export function createCalendarComponent(name) {
|
export function createCalendarComponent(name) {
|
||||||
const calendarComponent = new ICAL.Component(['vcalendar', [], []]);
|
const calendarComponent = new ICAL.Component(['vcalendar', [], []]);
|
||||||
|
@ -80,31 +104,11 @@ export function addEventsToCalendar(calendarComponent, results, overrideFlag = f
|
||||||
const vevent = new ICAL.Event(event);
|
const vevent = new ICAL.Event(event);
|
||||||
const newEvent = new ICAL.Component('vevent');
|
const newEvent = new ICAL.Component('vevent');
|
||||||
|
|
||||||
// 1. DTSTART with time zone
|
// 1. Add DTSTART
|
||||||
if (vevent.startDate) {
|
processDateTimeProperty(event, 'dtstart', newEvent);
|
||||||
const startTime = vevent.startDate.toString(); // Format start date properly
|
|
||||||
const dtstartProp = new ICAL.Property('dtstart', newEvent);
|
|
||||||
dtstartProp.setValue(startTime);
|
|
||||||
|
|
||||||
// Add TZID parameter if zone is present
|
|
||||||
if (vevent.startDate.zone) {
|
|
||||||
dtstartProp.setParameter('TZID', vevent.startDate.zone.tzid);
|
|
||||||
}
|
|
||||||
newEvent.addProperty(dtstartProp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. DTEND with time zone
|
|
||||||
if (vevent.endDate) {
|
|
||||||
const endTime = vevent.endDate.toString(); // Format end date properly
|
|
||||||
const dtendProp = new ICAL.Property('dtend', newEvent);
|
|
||||||
dtendProp.setValue(endTime);
|
|
||||||
|
|
||||||
// Add TZID parameter if zone is present
|
// 2. Add DTEND
|
||||||
if (vevent.endDate.zone) {
|
processDateTimeProperty(event, 'dtend', newEvent);
|
||||||
dtendProp.setParameter('TZID', vevent.endDate.zone.tzid);
|
|
||||||
}
|
|
||||||
newEvent.addProperty(dtendProp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. Copy DTSTAMP
|
// 3. Copy DTSTAMP
|
||||||
const dtstamp = event.getFirstPropertyValue('dtstamp');
|
const dtstamp = event.getFirstPropertyValue('dtstamp');
|
||||||
|
|
Loading…
Reference in New Issue