diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index 91fb55d8a..1a22c37c3 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,8 @@ +2010-08-13 Wolfgang Sourdeau + + * iCalAlarm.m (-nextAlarmDate): new utility method split from the + SOGo quick table extractor for events. + 2010-08-11 Wolfgang Sourdeau * NGVCardPhoto.m (-type): returns @"JPEG" if the type is diff --git a/SOPE/NGCards/iCalAlarm.h b/SOPE/NGCards/iCalAlarm.h index 41a45c042..ecb39f5c6 100644 --- a/SOPE/NGCards/iCalAlarm.h +++ b/SOPE/NGCards/iCalAlarm.h @@ -41,6 +41,8 @@ - (void) setRecurrenceRule: (NSString *) _recurrenceRule; - (NSString *) recurrenceRule; +- (NSCalendarDate *) nextAlarmDate; + @end #endif /* __NGCards_iCalAlarm_H__ */ diff --git a/SOPE/NGCards/iCalAlarm.m b/SOPE/NGCards/iCalAlarm.m index a4218fa84..cc7bc363e 100644 --- a/SOPE/NGCards/iCalAlarm.m +++ b/SOPE/NGCards/iCalAlarm.m @@ -20,10 +20,14 @@ */ #import +#import +#import #import "iCalAttachment.h" +#import "iCalEvent.h" #import "iCalRecurrenceRule.h" #import "iCalTrigger.h" +#import "NSString+NGCards.h" #import "iCalAlarm.h" @@ -103,4 +107,42 @@ return [[self uniqueChildWithTag: @"rrule"] value: 0]; } +- (NSCalendarDate *) nextAlarmDate +{ + Class parentClass; + iCalTrigger *aTrigger; + NSCalendarDate *relationDate, *nextAlarmDate; + NSString *relation; + NSTimeInterval anInterval; + iCalEvent *parentEvent; + + nextAlarmDate = nil; + + parentClass = [parent class]; + if ([parentClass isKindOfClass: [iCalEvent class]]) + { + parentEvent = (iCalEvent *) parent; + aTrigger = [self trigger]; + + if ([[aTrigger valueType] caseInsensitiveCompare: @"DURATION"]) + { + relation = [aTrigger relationType]; + anInterval = [[aTrigger value] durationAsTimeInterval]; + if ([relation caseInsensitiveCompare: @"END"] == NSOrderedSame) + relationDate = [parentEvent endDate]; + else + relationDate = [parentEvent startDate]; + + // Compute the next alarm date with respect to the reference date + if ([relationDate isNotNull]) + nextAlarmDate = [relationDate addTimeInterval: anInterval]; + } + } + else + [self warnWithFormat: @"alarms not handled for elements of class '%@'", + NSStringFromClass (parentClass)]; + + return nextAlarmDate; +} + @end /* iCalAlarm */