From 42817f45bf1146cf64e88bcbcc48a3adcd46913c Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 13 Aug 2010 21:03:04 +0000 Subject: [PATCH] Monotone-Parent: e16807404ac6ea20632ee7e0e21ae2db34830540 Monotone-Revision: 46e2b0eb136b0ff20576ecbaa9428e3c5bcd2ce7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-13T21:03:04 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/ChangeLog | 5 +++++ SOPE/NGCards/iCalAlarm.h | 2 ++ SOPE/NGCards/iCalAlarm.m | 42 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) 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 */