Monotone-Parent: c98770f24cfa85b41238be62c18aeaad6380a583

Monotone-Revision: 2699a7bfc566b3d087c4b5ed82888408feaa4fb3

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-11-12T20:56:56
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2007-11-12 20:56:56 +00:00
parent 0dafa1fbe3
commit ce13f57d23
2 changed files with 31 additions and 11 deletions
+7
View File
@@ -1,3 +1,10 @@
2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* 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 <wsourdeau@inverse.ca>
* iCalDateHolder.m ([iCalDateHolder -awakeAfterUsingSaxDecoder:]):
+24 -11
View File
@@ -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;
}