]> err.no Git - sope/blobdiff - sope-ical/NGiCal/iCalRepeatableEntityObject.m
improved API, bugfix for recurrent dates
[sope] / sope-ical / NGiCal / iCalRepeatableEntityObject.m
index 48ab00cc2f102f49d1f05d4555608fb19ab5469a..6d9a0ea8743e72cb11efcee70f60102c52eaaefd 100644 (file)
 - (NSArray *)recurrenceRangesWithinCalendarDateRange:(NGCalendarDateRange *)_r
   firstInstanceCalendarDateRange:(NGCalendarDateRange *)_fir
 {
-  iCalRecurrenceRule       *rule;
-  iCalRecurrenceCalculator *calc;
-  NSMutableArray           *ranges;
-  unsigned                 i, count, rCount;
-
-  ranges = [NSMutableArray array];
-  count  = [self->rRules count];
-  for (i = 0; i < count; i++) {
-    NSArray *rs;
-
-    rule = [self->rRules objectAtIndex:i];
-    calc = [iCalRecurrenceCalculator recurrenceCalculatorForRecurrenceRule:rule
-                                     withFirstInstanceCalendarDateRange:_fir];
-    rs   = [calc recurrenceRangesWithinCalendarDateRange:_r];
-    [ranges addObjectsFromArray:rs];
-  }
-  
-  if (![ranges count])
-    return nil;
-
-  /* test if any exceptions do match */
-  count = [self->exRules count];
-  for (i = 0; i < count; i++) {
-    NSArray *rs;
-
-    rule = [self->exRules objectAtIndex:i];
-    calc = [iCalRecurrenceCalculator recurrenceCalculatorForRecurrenceRule:rule
-                                     withFirstInstanceCalendarDateRange:_fir];
-    rs   = [calc recurrenceRangesWithinCalendarDateRange:_r];
-    [ranges removeObjectsInArray:rs];
-  }
-
-  if (![ranges count])
-    return nil;
-
-  /* exception dates are also possible */
-  rCount = [ranges count];
-  count  = [self->exDates count];
-  for (i = 0; i < count; i++) {
-    NSCalendarDate      *exDate;
-    NGCalendarDateRange *r;
-    unsigned            k;
-
-    exDate = [self->exDates objectAtIndex:i];
-    for (k = 0; k < rCount; k++) {
-      r = [ranges objectAtIndex:(rCount - k) - 1];
-      if ([r containsDate:exDate]) {
-        [ranges removeObjectAtIndex:k];
-      }
-    }
-  }
-  return ranges;
+  return [iCalRecurrenceCalculator recurrenceRangesWithinCalendarDateRange:_r
+                                   firstInstanceCalendarDateRange:_fir
+                                   recurrenceRules:self->rRules
+                                   exceptionRules:self->exRules
+                                   exceptionDates:self->exDates];
 }