Monotone-Parent: 404335da627fa036cf3569cb9212b3d2c29785a6
Monotone-Revision: b58773ad261dd708b850c5cd63f53133730d2c59 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-20T16:01:00maint-2.0.2
parent
2708e84549
commit
5d2d426e33
|
@ -1,3 +1,12 @@
|
||||||
|
2012-04-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
|
* iCalTrigger.m (-nextAlarmDate): new method including most of
|
||||||
|
the old code from -[iCalAlarm nextAlarmDate]. Added support for
|
||||||
|
DATE-TIME values.
|
||||||
|
|
||||||
|
* iCalAlarm.m (-nextAlarmDate): now a proxy method for
|
||||||
|
-[iCalTrigger nextAlarmDate].
|
||||||
|
|
||||||
2012-04-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
2012-04-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
* iCalRecurrenceRule.m (-orderOfValueKeys): overrriden method.
|
* iCalRecurrenceRule.m (-orderOfValueKeys): overrriden method.
|
||||||
|
|
|
@ -142,45 +142,20 @@
|
||||||
|
|
||||||
- (NSCalendarDate *) nextAlarmDate
|
- (NSCalendarDate *) nextAlarmDate
|
||||||
{
|
{
|
||||||
iCalTrigger *aTrigger;
|
NSCalendarDate *nextAlarmDate;
|
||||||
NSCalendarDate *relationDate, *nextAlarmDate;
|
|
||||||
NSString *relation;
|
|
||||||
NSTimeInterval anInterval;
|
|
||||||
|
|
||||||
// We currently have the following limitations for alarms:
|
// We currently have the following limitations for alarms:
|
||||||
// - the alarm's trigger value type must be DURATION;
|
// - the alarm's trigger value type must be DURATION;
|
||||||
|
|
||||||
nextAlarmDate = nil;
|
|
||||||
|
|
||||||
if ([parent isKindOfClass: [iCalEvent class]]
|
if ([parent isKindOfClass: [iCalEvent class]]
|
||||||
|| [parent isKindOfClass: [iCalToDo class]])
|
|| [parent isKindOfClass: [iCalToDo class]])
|
||||||
{
|
nextAlarmDate = [[self trigger] nextAlarmDate];
|
||||||
aTrigger = [self trigger];
|
|
||||||
|
|
||||||
if ([[aTrigger valueType] caseInsensitiveCompare: @"DURATION"]
|
|
||||||
== NSOrderedSame)
|
|
||||||
{
|
|
||||||
relation = [aTrigger relationType];
|
|
||||||
anInterval = [[aTrigger flattenedValuesForKey: @""]
|
|
||||||
durationAsTimeInterval];
|
|
||||||
if ([relation caseInsensitiveCompare: @"END"] == NSOrderedSame)
|
|
||||||
{
|
|
||||||
if ([parent isKindOfClass: [iCalEvent class]])
|
|
||||||
relationDate = [(iCalEvent *) parent endDate];
|
|
||||||
else
|
|
||||||
relationDate = [(iCalToDo *) parent due];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
relationDate = [(iCalEntityObject *) parent startDate];
|
|
||||||
|
|
||||||
// Compute the next alarm date with respect to the reference date
|
|
||||||
if ([relationDate isNotNull])
|
|
||||||
nextAlarmDate = [relationDate addTimeInterval: anInterval];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
[self warnWithFormat: @"alarms not handled for elements of class '%@'",
|
{
|
||||||
NSStringFromClass ([parent class])];
|
nextAlarmDate = nil;
|
||||||
|
[self errorWithFormat: @"alarms not handled for elements of class '%@'",
|
||||||
|
NSStringFromClass ([parent class])];
|
||||||
|
}
|
||||||
|
|
||||||
return nextAlarmDate;
|
return nextAlarmDate;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
- (void) setRelationType: (NSString *) theRelationType;
|
- (void) setRelationType: (NSString *) theRelationType;
|
||||||
- (NSString *) relationType;
|
- (NSString *) relationType;
|
||||||
|
|
||||||
|
- (NSCalendarDate *) nextAlarmDate;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif /* __NGCards_iCalTrigger_H__ */
|
#endif /* __NGCards_iCalTrigger_H__ */
|
||||||
|
|
|
@ -21,7 +21,11 @@
|
||||||
|
|
||||||
#import <Foundation/NSString.h>
|
#import <Foundation/NSString.h>
|
||||||
|
|
||||||
|
#import "iCalEvent.h"
|
||||||
#import "iCalTrigger.h"
|
#import "iCalTrigger.h"
|
||||||
|
#import "iCalToDo.h"
|
||||||
|
|
||||||
|
#import "NSString+NGCards.h"
|
||||||
|
|
||||||
@implementation iCalTrigger
|
@implementation iCalTrigger
|
||||||
|
|
||||||
|
@ -47,4 +51,46 @@
|
||||||
return [self value: 0 ofAttribute: @"related"];
|
return [self value: 0 ofAttribute: @"related"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSCalendarDate *) nextAlarmDate
|
||||||
|
{
|
||||||
|
NSCalendarDate *relationDate, *nextAlarmDate;
|
||||||
|
NSString *relation, *triggerValue;
|
||||||
|
NSTimeInterval anInterval;
|
||||||
|
id grandParent;
|
||||||
|
|
||||||
|
triggerValue = [[self valueType] uppercaseString];
|
||||||
|
if ([triggerValue length] == 0)
|
||||||
|
triggerValue = @"DURATION";
|
||||||
|
|
||||||
|
if ([triggerValue isEqualToString: @"DURATION"])
|
||||||
|
{
|
||||||
|
relation = [[self relationType] uppercaseString];
|
||||||
|
|
||||||
|
grandParent = [parent parent];
|
||||||
|
if ([relation isEqualToString: @"END"])
|
||||||
|
{
|
||||||
|
if ([grandParent isKindOfClass: [iCalEvent class]])
|
||||||
|
relationDate = [(iCalEvent *) grandParent endDate];
|
||||||
|
else
|
||||||
|
relationDate = [(iCalToDo *) grandParent due];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
relationDate = [(iCalEntityObject *) grandParent startDate];
|
||||||
|
|
||||||
|
// Compute the next alarm date with respect to the reference date
|
||||||
|
if (relationDate)
|
||||||
|
{
|
||||||
|
anInterval = [[self flattenedValuesForKey: @""]
|
||||||
|
durationAsTimeInterval];
|
||||||
|
nextAlarmDate = [relationDate addTimeInterval: anInterval];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ([triggerValue isEqualToString: @"DATE-TIME"])
|
||||||
|
nextAlarmDate = [[self flattenedValuesForKey: @""] asCalendarDate];
|
||||||
|
else
|
||||||
|
nextAlarmDate = nil;
|
||||||
|
|
||||||
|
return nextAlarmDate;
|
||||||
|
}
|
||||||
|
|
||||||
@end /* iCalTrigger */
|
@end /* iCalTrigger */
|
||||||
|
|
|
@ -234,7 +234,6 @@
|
||||||
// - the component must not be recurrent;
|
// - the component must not be recurrent;
|
||||||
// - only the first alarm is considered;
|
// - only the first alarm is considered;
|
||||||
// - the alarm's action must be of type DISPLAY;
|
// - the alarm's action must be of type DISPLAY;
|
||||||
// - the alarm's trigger value type must be DURATION;
|
|
||||||
//
|
//
|
||||||
// Morever, we don't update the quick table if the property X-WebStatus
|
// Morever, we don't update the quick table if the property X-WebStatus
|
||||||
// of the trigger is set to "triggered".
|
// of the trigger is set to "triggered".
|
||||||
|
|
Loading…
Reference in New Issue