mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-06-05 10:29:43 +00:00
(fix) email alarms are sent too many times (fixes #4100)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/* iCalAlarm+SOGo.h - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2015 Inverse inc.
|
||||
* Copyright (C) 2015-2017 Inverse inc.
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -21,6 +21,7 @@
|
||||
#import <NGCards/iCalAlarm.h>
|
||||
|
||||
@class iCalEntityObject;
|
||||
@class SOGoUser;
|
||||
|
||||
@interface iCalAlarm (SOGoExtensions)
|
||||
|
||||
@@ -34,4 +35,6 @@
|
||||
emailAttendees: (BOOL) reminderEmailAttendees
|
||||
emailOrganizer: (BOOL) reminderEmailOrganizer;
|
||||
|
||||
- (BOOL) userIsAttendee: (SOGoUser *) user;
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* iCalAlarm+SOGo.m - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2015 Inverse inc.
|
||||
* Copyright (C) 2015-2017 Inverse inc.
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -125,4 +125,24 @@
|
||||
return AUTORELEASE(anAlarm);
|
||||
}
|
||||
|
||||
- (BOOL) userIsAttendee: (SOGoUser *) user
|
||||
{
|
||||
NSEnumerator *attendees;
|
||||
iCalPerson *currentAttendee;
|
||||
BOOL isAttendee;
|
||||
|
||||
isAttendee = NO;
|
||||
|
||||
attendees = [[self attendees] objectEnumerator];
|
||||
currentAttendee = [attendees nextObject];
|
||||
while (!isAttendee
|
||||
&& currentAttendee)
|
||||
if ([user hasEmail: [currentAttendee rfc822Email]])
|
||||
isAttendee = YES;
|
||||
else
|
||||
currentAttendee = [attendees nextObject];
|
||||
|
||||
return isAttendee;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -690,6 +690,7 @@ NSNumber *iCalDistantFutureNumber = nil;
|
||||
{
|
||||
NSCalendarDate *nextAlarmDate;
|
||||
GCSAlarmsFolder *af;
|
||||
SOGoUser *alarmOwner;
|
||||
NSString *path;
|
||||
|
||||
int email_alarm_number;
|
||||
@@ -698,11 +699,13 @@ NSNumber *iCalDistantFutureNumber = nil;
|
||||
{
|
||||
af = [[GCSFolderManager defaultFolderManager] alarmsFolder];
|
||||
path = [theContainer ocsPath];
|
||||
alarmOwner = [SOGoUser userWithLogin: [[path componentsSeparatedByString: @"/"] objectAtIndex: 2]];
|
||||
}
|
||||
else
|
||||
{
|
||||
af = nil;
|
||||
path = nil;
|
||||
alarmOwner = nil;
|
||||
}
|
||||
|
||||
nextAlarmDate = nil;
|
||||
@@ -736,7 +739,8 @@ NSNumber *iCalDistantFutureNumber = nil;
|
||||
email_alarm_number = [[self alarms] indexOfObject: anAlarm];
|
||||
|
||||
// The email alarm is too old, let's just remove it
|
||||
if ([nextAlarmDate earlierDate: [NSDate date]] == nextAlarmDate)
|
||||
if ([nextAlarmDate earlierDate: [NSDate date]] == nextAlarmDate ||
|
||||
![anAlarm userIsAttendee: alarmOwner])
|
||||
nextAlarmDate = nil;
|
||||
else
|
||||
{
|
||||
@@ -831,17 +835,21 @@ NSNumber *iCalDistantFutureNumber = nil;
|
||||
nextAlarmDate = [NSDate dateWithTimeIntervalSince1970: [[[alarms objectAtIndex: i] objectForKey: @"c_nextalarm"] intValue]];
|
||||
}
|
||||
else if ((anAlarm = [self firstEmailAlarm]) && af)
|
||||
|
||||
{
|
||||
nextAlarmDate = [NSDate dateWithTimeIntervalSince1970: [[[alarms objectAtIndex: i] objectForKey: @"c_nextalarm"] intValue]];
|
||||
email_alarm_number = [[self alarms] indexOfObject: anAlarm];
|
||||
|
||||
[af writeRecordForEntryWithCName: nameInContainer
|
||||
inCalendarAtPath: path
|
||||
forUID: [self uid]
|
||||
recurrenceId: [self recurrenceId]
|
||||
alarmNumber: [NSNumber numberWithInt: email_alarm_number]
|
||||
andAlarmDate: nextAlarmDate];
|
||||
}
|
||||
if ([anAlarm userIsAttendee: alarmOwner])
|
||||
[af writeRecordForEntryWithCName: nameInContainer
|
||||
inCalendarAtPath: path
|
||||
forUID: [self uid]
|
||||
recurrenceId: [self recurrenceId]
|
||||
alarmNumber: [NSNumber numberWithInt: email_alarm_number]
|
||||
andAlarmDate: nextAlarmDate];
|
||||
else
|
||||
nextAlarmDate = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
} // for ( ... )
|
||||
|
||||
Reference in New Issue
Block a user