}
- (void)dealloc {
+ [self->byMonthDay release];
[self->untilDate release];
[self->rrule release];
[super dealloc];
}
- (void)setUntilDate:(NSCalendarDate *)_untilDate {
- ASSIGN(self->untilDate, _untilDate);
+ ASSIGNCOPY(self->untilDate, _untilDate);
}
- (NSCalendarDate *)untilDate {
return self->untilDate;
return self->byDayOccurence1;
}
+- (NSArray *)byMonthDay {
+ return self->byMonthDay;
+}
+
- (BOOL)isInfinite {
return (self->repeatCount != 0 || self->untilDate) ? NO : YES;
}
*/
- (NSString *)byDayList {
NSMutableString *s;
- unsigned i, mask, day;
+ unsigned dow, mask, day;
BOOL needsComma;
s = [NSMutableString stringWithCapacity:20];
mask = self->byDay.mask;
day = iCalWeekDayMonday;
- for (i = 0; i < 7; i++) {
+ for (dow = 0 /* Sun */; dow < 7; dow++) {
if (mask & day) {
if (needsComma)
[s appendString:@","];
- else if (self->byDay.useOccurence)
- // Note: we only support one occurrence currently
+
+ if (self->byDay.useOccurence)
+ // Note: we only support one occurrence for all currently
[s appendFormat:@"%i", self->byDayOccurence1];
[s appendString:[self iCalRepresentationForWeekDay:day]];
NSString *pUntil = nil;
NSString *pCount = nil;
NSString *pByday = nil;
+ NSString *pBymday = nil;
NSString *pBysetpos = nil;
props = [_rrule componentsSeparatedByString:@";"];
vHolder = NULL;
switch ([key characterAtIndex:0]) {
case 'b':
- if ([key isEqualToString:@"byday"]) vHolder = &pByday; break;
- if ([key isEqualToString:@"bysetpos"]) vHolder = &pBysetpos; break;
+ if ([key isEqualToString:@"byday"]) { vHolder = &pByday; break; }
+ if ([key isEqualToString:@"bymonthday"]) { vHolder = &pBymday; break; }
+ if ([key isEqualToString:@"bysetpos"]) { vHolder = &pBysetpos; break; }
break;
case 'c':
- if ([key isEqualToString:@"count"]) vHolder = &pCount; break;
+ if ([key isEqualToString:@"count"]) { vHolder = &pCount; break; }
break;
case 'f':
- if ([key isEqualToString:@"freq"]) vHolder = &pFrequency; break;
+ if ([key isEqualToString:@"freq"]) { vHolder = &pFrequency; break; }
break;
case 'u':
- if ([key isEqualToString:@"until"]) vHolder = &pUntil; break;
+ if ([key isEqualToString:@"until"]) { vHolder = &pUntil; break; }
break;
default:
break;
else {
// TODO: we should just parse known keys and put remainders into a
// separate dictionary
- //[self logWithFormat:@"TODO: add explicit support for key: %@", key];
+ [self logWithFormat:@"TODO: add explicit support for key: %@", key];
[self takeValue:value forKey:key];
}
}
// TODO: we should parse byday in here
if (pByday != nil) [self setByday:pByday];
[pByday release]; pByday = nil;
+
+ if (pBymday != nil) {
+ NSArray *t;
+
+ t = [pBymday componentsSeparatedByString:@","];
+ ASSIGNCOPY(self->byMonthDay, t);
+ }
+ [pBymday release]; pBymday = nil;
if (pBysetpos != nil)
// TODO: implement
int offset;
occurence = [iCalDay intValue];
-
- offset = 1;
+
+ offset = 1; /* skip occurence */
while (offset < len && isdigit([iCalDay characterAtIndex:offset]))
offset++;
iCalDay = [iCalDay substringFromIndex:offset];
- if (self->byDay.useOccurence) {
+ if (self->byDay.useOccurence && (occurence != self->byDayOccurence1)) {
[self errorWithFormat:
@"we only supported one occurence (occ=%i,day=%@): '%@'",
occurence, iCalDay, _byDayList];