diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index 8a9219906..032315762 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,16 @@ +2010-09-28 Francis Lachapelle + + * NSString+NGCards.m (-asCalendarDate): added handling of date that + includes dashes (YYYY-MM-DD). + + * iCalDateTime.m (-dateTimes): new method that handles EXDATE with + multiple values. + + * iCalRepeatableEntityObject.m (-exceptionDates): add all values + from each EXDATE attribute. + + * iCalRepeatableEntityObject.m (-exceptionDates): idem. + 2010-08-30 Wolfgang Sourdeau * iCalPerson.m, iCalWeeklyRecurrenceCalculator.m: adapted classes diff --git a/SOPE/NGCards/NSString+NGCards.m b/SOPE/NGCards/NSString+NGCards.m index 7e2cbef7b..1fb730337 100644 --- a/SOPE/NGCards/NSString+NGCards.m +++ b/SOPE/NGCards/NSString+NGCards.m @@ -1,6 +1,6 @@ /* NSString+NGCards.m - this file is part of SOPE * - * Copyright (C) 2006-2009 Inverse inc. + * Copyright (C) 2006-2010 Inverse inc. * * Author: Wolfgang Sourdeau * @@ -246,8 +246,12 @@ static NSString *commaSeparator = nil; year = [[self substringWithRange: cursor] intValue]; cursor.location += cursor.length; cursor.length = 2; + if ([[self substringWithRange: cursor] hasPrefix: @"-"]) + cursor.location += 1; month = [[self substringWithRange: cursor] intValue]; cursor.location += cursor.length; + if ([[self substringWithRange: cursor] hasPrefix: @"-"]) + cursor.location += 1; day = [[self substringWithRange: cursor] intValue]; if (length > 14) diff --git a/SOPE/NGCards/iCalDateTime.h b/SOPE/NGCards/iCalDateTime.h index 47e4ca0b7..0fd32c64c 100644 --- a/SOPE/NGCards/iCalDateTime.h +++ b/SOPE/NGCards/iCalDateTime.h @@ -35,6 +35,8 @@ - (void) setDate: (NSCalendarDate *) date; - (void) setDateTime: (NSCalendarDate *) dateTime; + +- (NSArray *) dateTimes; - (NSCalendarDate *) dateTime; - (BOOL) isAllDay; diff --git a/SOPE/NGCards/iCalDateTime.m b/SOPE/NGCards/iCalDateTime.m index cc0a2d4e7..d11fd139c 100644 --- a/SOPE/NGCards/iCalDateTime.m +++ b/SOPE/NGCards/iCalDateTime.m @@ -20,6 +20,7 @@ * Boston, MA 02111-1307, USA. */ +#import #import #import @@ -150,37 +151,51 @@ } - (NSCalendarDate *) dateTime +{ + return [[self dateTimes] lastObject]; +} + +- (NSArray *) dateTimes { iCalTimeZone *iTZ; NSString *date; NSCalendarDate *initialDate, *dateTime; + NSMutableArray *dates; NSTimeZone *tz; + unsigned count, i; - date = [self value: 0]; - iTZ = [self timeZone]; - if (iTZ) - dateTime = [iTZ dateForDateTimeString: date]; - else + count = [[self values] count]; + dates = [NSMutableArray arrayWithCapacity: count]; + for (i = 0; i < count; i++) { - initialDate = [date asCalendarDate]; - if (initialDate) - { - if ([date hasSuffix: @"Z"] || [date hasSuffix: @"z"]) - dateTime = initialDate; - else - { - /* same TODO as above */ - tz = [NSTimeZone defaultTimeZone]; - dateTime = [initialDate addYear: 0 month: 0 day: 0 - hour: 0 minute: 0 - second: -[tz secondsFromGMTForDate: initialDate]]; - } - } + date = [self value: i]; + iTZ = [self timeZone]; + if (iTZ) + dateTime = [iTZ dateForDateTimeString: date]; else - dateTime = nil; + { + initialDate = [date asCalendarDate]; + if (initialDate) + { + if ([date hasSuffix: @"Z"] || [date hasSuffix: @"z"]) + dateTime = initialDate; + else + { + /* same TODO as above */ + tz = [NSTimeZone defaultTimeZone]; + dateTime = [initialDate addYear: 0 month: 0 day: 0 + hour: 0 minute: 0 + second: -[tz secondsFromGMTForDate: initialDate]]; + } + } + else + dateTime = nil; + } + if (dateTime) + [dates addObject: dateTime]; } - - return dateTime; + + return dates; } - (BOOL) isAllDay diff --git a/SOPE/NGCards/iCalRepeatableEntityObject.m b/SOPE/NGCards/iCalRepeatableEntityObject.m index 4e68ed50b..6f8d8ccf4 100644 --- a/SOPE/NGCards/iCalRepeatableEntityObject.m +++ b/SOPE/NGCards/iCalRepeatableEntityObject.m @@ -1,5 +1,6 @@ /* Copyright (C) 2004-2005 SKYRIX Software AG + Copyright (C) 2010 Inverse inc. This file is part of SOPE. @@ -131,18 +132,26 @@ - (NSArray *) exceptionDates { + NSArray *exDates; NSMutableArray *dates; NSEnumerator *dateList; NSCalendarDate *exDate; NSString *dateString; + unsigned i; dates = [NSMutableArray array]; dateList = [[self childrenWithTag: @"exdate"] objectEnumerator]; - while ((exDate = [[dateList nextObject] dateTime])) + + while ((dateString = [dateList nextObject])) { - dateString = [NSString stringWithFormat: @"%@Z", - [exDate iCalFormattedDateTimeString]]; - [dates addObject: dateString]; + exDates = [(iCalDateTime*) dateString dateTimes]; + for (i = 0; i < [exDates count]; i++) + { + exDate = [exDates objectAtIndex: i]; + dateString = [NSString stringWithFormat: @"%@Z", + [exDate iCalFormattedDateTimeString]]; + [dates addObject: dateString]; + } } return dates;