Skip to content

Commit

Permalink
(fix) email reminders sent multiple times (fixes #4100)
Browse files Browse the repository at this point in the history
  • Loading branch information
extrafu committed Apr 21, 2017
1 parent 7582ec8 commit ab50a41
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 18 deletions.
1 change: 1 addition & 0 deletions NEWS
Expand Up @@ -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
Expand Down
15 changes: 7 additions & 8 deletions SoObjects/Appointments/SOGoEMailAlarmsManager.m
Expand Up @@ -149,24 +149,23 @@ - (void) _extractContainer: (NSString **) container
- (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
Expand Down
19 changes: 9 additions & 10 deletions SoObjects/Appointments/iCalEntityObject+SOGo.m
Expand Up @@ -692,7 +692,7 @@ - (void) updateNextAlarmDateInRow: (NSMutableDictionary *) row
GCSAlarmsFolder *af;
NSString *path;

int alarm_number;
int email_alarm_number;

if ([[SOGoSystemDefaults sharedSystemDefaults] enableEMailAlarms])
{
Expand All @@ -706,7 +706,7 @@ - (void) updateNextAlarmDateInRow: (NSMutableDictionary *) row
}

nextAlarmDate = nil;
alarm_number = -1;
email_alarm_number = -1;

if ([self hasAlarms])
{
Expand All @@ -733,19 +733,18 @@ - (void) updateNextAlarmDateInRow: (NSMutableDictionary *) row
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];
}
}
Expand Down Expand Up @@ -834,13 +833,13 @@ - (void) updateNextAlarmDateInRow: (NSMutableDictionary *) row
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];
}
}
Expand All @@ -850,8 +849,8 @@ - (void) updateNextAlarmDateInRow: (NSMutableDictionary *) row
}
}

// 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"];
Expand All @@ -861,7 +860,7 @@ - (void) updateNextAlarmDateInRow: (NSMutableDictionary *) row
[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]];
}
Expand Down

0 comments on commit ab50a41

Please sign in to comment.