diff --git a/NEWS b/NEWS index 106187f28..510847e0c 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Bug fixes - [core] cherry-picked comma escaping fix from v2 (#3296) - [core] fix sogo-tool restore potentially crashing on corrupted data (#4048) - [core] handle properly mails using windows-1255 charset (#4124) + - [core] fixed email reminders sent multiple times (#4100) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) - [eas] correctly set RSVP on event invitations diff --git a/SoObjects/Appointments/SOGoEMailAlarmsManager.m b/SoObjects/Appointments/SOGoEMailAlarmsManager.m index bc79fd8b5..32934a1bf 100644 --- a/SoObjects/Appointments/SOGoEMailAlarmsManager.m +++ b/SoObjects/Appointments/SOGoEMailAlarmsManager.m @@ -149,24 +149,23 @@ - (SOGoAppointmentFolder *) _lookupContainerMatchingRecord: (NSDictionary *) record { SOGoAppointmentFolders *folders; + SOGoAppointmentFolder *calendar; NSString *container, *owner; - SOGoUserFolder *userFolder; SOGoUser *user; WOContext *context; [self _extractOwner: &owner fromPath: [record objectForKey: @"c_path"]]; [self _extractContainer: &container fromPath: [record objectForKey: @"c_path"]]; user = [SOGoUser userWithLogin: owner]; - userFolder = [SOGoUserFolder objectWithName: owner inContainer: nil]; + context = [WOContext context]; [context setActiveUser: user]; - folders = [userFolder lookupName: @"Calendar" - inContext: context - acquire: NO]; - return [folders lookupName: container - inContext: context - acquire: NO]; + folders = [user calendarsFolderInContext: context]; + + calendar = [folders lookupPersonalFolder: container ignoringRights: YES]; + + return calendar; } - (iCalAlarm *) _lookupAlarmMatchingRecord: (NSDictionary *) record diff --git a/SoObjects/Appointments/iCalEntityObject+SOGo.m b/SoObjects/Appointments/iCalEntityObject+SOGo.m index b42d41592..3db197ee0 100644 --- a/SoObjects/Appointments/iCalEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalEntityObject+SOGo.m @@ -692,7 +692,7 @@ NSNumber *iCalDistantFutureNumber = nil; GCSAlarmsFolder *af; NSString *path; - int alarm_number; + int email_alarm_number; if ([[SOGoSystemDefaults sharedSystemDefaults] enableEMailAlarms]) { @@ -706,7 +706,7 @@ NSNumber *iCalDistantFutureNumber = nil; } nextAlarmDate = nil; - alarm_number = -1; + email_alarm_number = -1; if ([self hasAlarms]) { @@ -733,19 +733,18 @@ NSNumber *iCalDistantFutureNumber = nil; else if ((anAlarm = [self firstEmailAlarm]) && af) { nextAlarmDate = [anAlarm nextAlarmDate]; + email_alarm_number = [[self alarms] indexOfObject: anAlarm]; // The email alarm is too old, let's just remove it if ([nextAlarmDate earlierDate: [NSDate date]] == nextAlarmDate) nextAlarmDate = nil; else { - alarm_number = [[self alarms] indexOfObject: anAlarm]; - [af writeRecordForEntryWithCName: nameInContainer inCalendarAtPath: path forUID: [self uid] recurrenceId: nil - alarmNumber: [NSNumber numberWithInt: alarm_number] + alarmNumber: [NSNumber numberWithInt: email_alarm_number] andAlarmDate: nextAlarmDate]; } } @@ -834,13 +833,13 @@ NSNumber *iCalDistantFutureNumber = nil; else if ((anAlarm = [self firstEmailAlarm]) && af) { nextAlarmDate = [NSDate dateWithTimeIntervalSince1970: [[[alarms objectAtIndex: i] objectForKey: @"c_nextalarm"] intValue]]; - alarm_number = [[self alarms] indexOfObject: anAlarm]; + email_alarm_number = [[self alarms] indexOfObject: anAlarm]; [af writeRecordForEntryWithCName: nameInContainer inCalendarAtPath: path forUID: [self uid] recurrenceId: [self recurrenceId] - alarmNumber: [NSNumber numberWithInt: alarm_number] + alarmNumber: [NSNumber numberWithInt: email_alarm_number] andAlarmDate: nextAlarmDate]; } } @@ -850,8 +849,8 @@ NSNumber *iCalDistantFutureNumber = nil; } } - // Don't update c_nextalarm in the quick table if it's an email alarm - if ([nextAlarmDate isNotNull] && alarm_number < 0) + // Don't update c_nextalarm in the quick table if it's not na email alarm + if ([nextAlarmDate isNotNull] && email_alarm_number < 0) { [row setObject: [NSNumber numberWithInt: [nextAlarmDate timeIntervalSince1970]] forKey: @"c_nextalarm"]; @@ -861,7 +860,7 @@ NSNumber *iCalDistantFutureNumber = nil; [row setObject: [NSNumber numberWithInt: 0] forKey: @"c_nextalarm"]; // Delete old email alarms - if (!nextAlarmDate && alarm_number >= 0) + if (!nextAlarmDate && email_alarm_number >= 0) [af deleteRecordForEntryWithCName: nameInContainer inCalendarAtPath: [theContainer ocsPath]]; }