From ce13f57d237c4ea29c202ad54a81c53f30340eb6 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 12 Nov 2007 20:56:56 +0000 Subject: [PATCH] Monotone-Parent: c98770f24cfa85b41238be62c18aeaad6380a583 Monotone-Revision: 2699a7bfc566b3d087c4b5ed82888408feaa4fb3 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-11-12T20:56:56 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/ChangeLog | 7 +++++++ SOPE/NGCards/iCalTimeZonePeriod.m | 35 +++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index 549ad5a29..ec0c0c542 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,10 @@ +2007-11-12 Wolfgang Sourdeau + + * iCalTimeZonePeriod.m ([iCalTimeZonePeriod + -occurenceForDate:refDate]): added support for timezone periods + which do not contain a recurrence rule, such as the one provided + by iCal. + 2007-11-02 Wolfgang Sourdeau * iCalDateHolder.m ([iCalDateHolder -awakeAfterUsingSaxDecoder:]): diff --git a/SOPE/NGCards/iCalTimeZonePeriod.m b/SOPE/NGCards/iCalTimeZonePeriod.m index 29bd9bb17..dc1f611fd 100644 --- a/SOPE/NGCards/iCalTimeZonePeriod.m +++ b/SOPE/NGCards/iCalTimeZonePeriod.m @@ -99,35 +99,48 @@ return dayOfWeek; } -- (NSCalendarDate *) occurenceForDate: (NSCalendarDate *) refDate; +- (NSCalendarDate *) _occurenceForDate: (NSCalendarDate *) refDate + byRRule: (iCalRecurrenceRule *) rrule { NSCalendarDate *tmpDate; - iCalRecurrenceRule *rrule; NSString *byDay; int dayOfWeek, dateDayOfWeek, offset, pos; - rrule = (iCalRecurrenceRule *) [self uniqueChildWithTag: @"rrule"]; byDay = [rrule namedValue: @"byday"]; dayOfWeek = [self dayOfWeekFromRruleDay: [rrule byDayMask]]; pos = [[byDay substringToIndex: 2] intValue]; if (!pos) pos = 1; - tmpDate = [NSCalendarDate - dateWithYear: [refDate yearOfCommonEra] - month: [[rrule namedValue: @"bymonth"] intValue] - day: 1 hour: 0 minute: 0 second: 0 - timeZone: [NSTimeZone timeZoneWithName: @"GMT"]]; + tmpDate = [NSCalendarDate dateWithYear: [refDate yearOfCommonEra] + month: [[rrule namedValue: @"bymonth"] intValue] + day: 1 hour: 0 minute: 0 second: 0 + timeZone: [NSTimeZone timeZoneWithName: @"GMT"]]; tmpDate = [tmpDate addYear: 0 month: ((pos > 0) ? 0 : 1) - day: 0 hour: 0 minute: 0 - second: -[self _secondsOfOffset: @"tzoffsetfrom"]]; + day: 0 hour: 0 minute: 0 + second: -[self _secondsOfOffset: @"tzoffsetfrom"]]; dateDayOfWeek = [tmpDate dayOfWeek]; offset = (dayOfWeek - dateDayOfWeek); if (pos > 0 && offset < 0) offset += 7; offset += (pos * 7); tmpDate = [tmpDate addYear: 0 month: 0 day: offset - hour: 0 minute: 0 second: 0]; + hour: 0 minute: 0 second: 0]; + + return tmpDate; +} + +- (NSCalendarDate *) occurenceForDate: (NSCalendarDate *) refDate; +{ + NSCalendarDate *tmpDate; + iCalRecurrenceRule *rrule; + + rrule = (iCalRecurrenceRule *) [self uniqueChildWithTag: @"rrule"]; + if ([rrule isVoid]) + tmpDate + = [(iCalDateTime *) [self uniqueChildWithTag: @"dtstart"] dateTime]; + else + tmpDate = [self _occurenceForDate: refDate byRRule: rrule]; return tmpDate; }