From 9c025f68713b6d07f8e6f6d4e00bf23466cc7249 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 25 Nov 2021 17:51:18 -0500 Subject: [PATCH] fix(calendar): update email alarm of yearly events We now compute the next alarms of a yrealy recurrent event for a period of two years in order to make sure to pickup the next occurrence and update the email alarms table, otherwise sogo-ealarms-notify was sending email alarms every minute until the next alarm was properly computed. Fixes #4991 --- SoObjects/Appointments/iCalEntityObject+SOGo.m | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/SoObjects/Appointments/iCalEntityObject+SOGo.m b/SoObjects/Appointments/iCalEntityObject+SOGo.m index 679eb59b1..26949f88a 100644 --- a/SoObjects/Appointments/iCalEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalEntityObject+SOGo.m @@ -761,8 +761,11 @@ NSNumber *iCalDistantFutureNumber = nil; NSMutableArray *alarms; alarms = [NSMutableArray array]; + + // Compute the alarms for the next 2 years. We must cover more than 1 year since yearly alarms that are triggered + // 1 day before the event date require a range of at least 1 year and 1 day. Too play safe, we cover 2 years. start = [NSCalendarDate date]; - end = [start addYear:1 month:0 day:0 hour:0 minute:0 second:0]; + end = [start addYear:2 month:0 day:0 hour:0 minute:0 second:0]; range = [NGCalendarDateRange calendarDateRangeWithStartDate: start endDate: end]; @@ -832,12 +835,12 @@ NSNumber *iCalDistantFutureNumber = nil; || ([webstatus caseInsensitiveCompare: @"TRIGGERED"] != NSOrderedSame)) v = delta; - nextAlarmDate = [NSDate dateWithTimeIntervalSince1970: [[[alarms objectAtIndex: i] objectForKey: @"c_nextalarm"] intValue]]; + nextAlarmDate = [NSDate dateWithTimeIntervalSince1970: c_nextalarm]; } else if ((anAlarm = [self firstEmailAlarm]) && af) { - nextAlarmDate = [NSDate dateWithTimeIntervalSince1970: [[[alarms objectAtIndex: i] objectForKey: @"c_nextalarm"] intValue]]; + nextAlarmDate = [NSDate dateWithTimeIntervalSince1970: c_nextalarm]; email_alarm_number = [[self alarms] indexOfObject: anAlarm]; if ([anAlarm userIsAttendee: alarmOwner]) @@ -857,7 +860,7 @@ NSNumber *iCalDistantFutureNumber = nil; } } - // Don't update c_nextalarm in the quick table if it's not na email alarm + // Don't update c_nextalarm in the quick table if it's not an email alarm if ([nextAlarmDate isNotNull] && email_alarm_number < 0) { [row setObject: [NSNumber numberWithInt: [nextAlarmDate timeIntervalSince1970]]