(fix) email reminders sent multiple times (fixes #4100)

pull/236/head
Ludovic Marcotte 2017-04-21 08:49:56 -04:00
parent 7582ec8462
commit ab50a41a86
3 changed files with 17 additions and 18 deletions

1
NEWS
View File

@ -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

View File

@ -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

View File

@ -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]];
}