From 53d77f3105c2d7f6aa2be1cac691dd19a4754df8 Mon Sep 17 00:00:00 2001 From: smizrahi Date: Tue, 28 May 2024 11:32:05 +0200 Subject: [PATCH] perf(calendar): Optimization of date computation when handle attendees. Report of 77b2d9f8. --- SoObjects/Appointments/SOGoAppointmentObject.m | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 1f7dc9132..6528e0a6b 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -639,12 +639,17 @@ NSEnumerator *enumerator; NSString *currentUID; SOGoUser *user, *currentUser; + unsigned long long eventStartPeriod, eventEndPeriod; _resourceHasAutoAccepted = NO; // Build a list of the attendees uids attendees = [NSMutableArray arrayWithCapacity: [theAttendees count]]; enumerator = [theAttendees objectEnumerator]; + + eventStartPeriod = [[[(iCalDateTime *)[theEvent uniqueChildWithTag: @"dtstart"] timeZone] periodForDate: [theEvent startDate]] secondsOffsetFromGMT]; + eventEndPeriod = [[[(iCalDateTime *)[theEvent uniqueChildWithTag: @"dtend"] timeZone] periodForDate: [theEvent startDate]] secondsOffsetFromGMT]; + while ((currentAttendee = [enumerator nextObject])) { currentUID = [currentAttendee uidInContext: context]; @@ -740,11 +745,11 @@ // We MUST use the -uniqueChildWithTag method here because the event has been flattened, so its timezone has been // modified in SOGoAppointmentFolder: -fixupCycleRecord: .... rangeStartDate = [[fbInfo objectAtIndex: i] objectForKey: @"startDate"]; - delta = [[rangeStartDate timeZoneDetail] timeZoneSecondsFromGMT] - [[[(iCalDateTime *)[theEvent uniqueChildWithTag: @"dtstart"] timeZone] periodForDate: [theEvent startDate]] secondsOffsetFromGMT]; + delta = [[rangeStartDate timeZoneDetail] timeZoneSecondsFromGMT] - eventStartPeriod; rangeStartDate = [rangeStartDate dateByAddingYears: 0 months: 0 days: 0 hours: 0 minutes: 0 seconds: delta]; rangeEndDate = [[fbInfo objectAtIndex: i] objectForKey: @"endDate"]; - delta = [[rangeEndDate timeZoneDetail] timeZoneSecondsFromGMT] - [[[(iCalDateTime *)[theEvent uniqueChildWithTag: @"dtend"] timeZone] periodForDate: [theEvent endDate]] secondsOffsetFromGMT]; + delta = [[rangeEndDate timeZoneDetail] timeZoneSecondsFromGMT] - eventEndPeriod; rangeEndDate = [rangeEndDate dateByAddingYears: 0 months: 0 days: 0 hours: 0 minutes: 0 seconds: delta]; range = [NGCalendarDateRange calendarDateRangeWithStartDate: rangeStartDate