Monotone-Parent: cb36ec3f7d193b795240d0061daae4db88f1c337
Monotone-Revision: 67b80dfcbf50feccf26e6968ff799ca9f51c1b3f Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-03-22T20:58:22 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
9921bba68b
commit
f51e037f41
|
@ -1,5 +1,12 @@
|
||||||
2011-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
2011-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
|
* iCalEvent.m (-firstRecurrenceStartDate): new method that makes
|
||||||
|
use of the new one below.
|
||||||
|
|
||||||
|
* iCalRepeatableEntityObject.m
|
||||||
|
(-firstRecurrenceStartDateWithEndDate:): new method that returns
|
||||||
|
the first occurrence of a recurring entity.
|
||||||
|
|
||||||
* iCalByDayMask.m (-occursOnDay:withWeekOccurrence:): fixed method
|
* iCalByDayMask.m (-occursOnDay:withWeekOccurrence:): fixed method
|
||||||
to return true only when it is valid to do so...
|
to return true only when it is valid to do so...
|
||||||
(-weekDayOccurrences): new method that returns a reference to the
|
(-weekDayOccurrences): new method that returns a reference to the
|
||||||
|
|
|
@ -50,7 +50,6 @@
|
||||||
- (NSCalendarDate *) endDate;
|
- (NSCalendarDate *) endDate;
|
||||||
- (BOOL) hasEndDate;
|
- (BOOL) hasEndDate;
|
||||||
|
|
||||||
- (void) setDuration: (NSString *) _value;
|
|
||||||
- (NSString *) duration;
|
- (NSString *) duration;
|
||||||
- (BOOL) hasDuration;
|
- (BOOL) hasDuration;
|
||||||
- (NSTimeInterval) durationAsTimeInterval;
|
- (NSTimeInterval) durationAsTimeInterval;
|
||||||
|
@ -74,6 +73,8 @@
|
||||||
|
|
||||||
- (id) propertyValue: (NSString *) property;
|
- (id) propertyValue: (NSString *) property;
|
||||||
|
|
||||||
|
- (NSCalendarDate *) firstRecurrenceStartDate;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif /* __NGCards_iCalEvent_H__ */
|
#endif /* __NGCards_iCalEvent_H__ */
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#import "iCalEventChanges.h"
|
#import "iCalEventChanges.h"
|
||||||
#import "iCalDateTime.h"
|
#import "iCalDateTime.h"
|
||||||
|
#import "iCalRecurrenceRule.h"
|
||||||
|
#import "iCalRecurrenceCalculator.h"
|
||||||
|
|
||||||
#import "iCalEvent.h"
|
#import "iCalEvent.h"
|
||||||
|
|
||||||
|
@ -288,4 +290,10 @@
|
||||||
return [self performSelector: NSSelectorFromString (method)];
|
return [self performSelector: NSSelectorFromString (method)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSCalendarDate *) firstRecurrenceStartDate
|
||||||
|
{
|
||||||
|
return [self firstRecurrenceStartDateWithEndDate: [self endDate]];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@end /* iCalEvent */
|
@end /* iCalEvent */
|
||||||
|
|
|
@ -68,6 +68,8 @@
|
||||||
/* this is the outmost bound possible, not necessarily the real last date */
|
/* this is the outmost bound possible, not necessarily the real last date */
|
||||||
- (NSCalendarDate *)lastPossibleRecurrenceStartDateUsingFirstInstanceCalendarDateRange:(NGCalendarDateRange *)_r;
|
- (NSCalendarDate *)lastPossibleRecurrenceStartDateUsingFirstInstanceCalendarDateRange:(NGCalendarDateRange *)_r;
|
||||||
|
|
||||||
|
- (NSCalendarDate *) firstRecurrenceStartDateWithEndDate: (NSCalendarDate *) endDate;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif /* __NGCards_iCalRepeatableEntityObject_H_ */
|
#endif /* __NGCards_iCalRepeatableEntityObject_H_ */
|
||||||
|
|
|
@ -259,4 +259,74 @@ lastPossibleRecurrenceStartDateUsingFirstInstanceCalendarDateRange: (NGCalendarD
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSCalendarDate *) firstRecurrenceStartDateWithEndDate: (NSCalendarDate *) endDate
|
||||||
|
{
|
||||||
|
NSCalendarDate *startDate, *firstOccurrenceStartDate, *endOfFirstRange;
|
||||||
|
NGCalendarDateRange *range, *firstInstanceRange;
|
||||||
|
iCalRecurrenceFrequency frequency;
|
||||||
|
iCalRecurrenceRule *rule;
|
||||||
|
NSArray *rules, *recurrences;
|
||||||
|
uint32_t units;
|
||||||
|
|
||||||
|
firstOccurrenceStartDate = nil;
|
||||||
|
|
||||||
|
rules = [self recurrenceRules];
|
||||||
|
if ([rules count] > 0)
|
||||||
|
{
|
||||||
|
rule = [rules objectAtIndex: 0];
|
||||||
|
frequency = [rule frequency];
|
||||||
|
units = [rule repeatInterval];
|
||||||
|
|
||||||
|
startDate = [self startDate];
|
||||||
|
switch (frequency)
|
||||||
|
{
|
||||||
|
/* second-based units */
|
||||||
|
case iCalRecurrenceFrequenceWeekly:
|
||||||
|
units *= 7;
|
||||||
|
case iCalRecurrenceFrequenceDaily:
|
||||||
|
units *= 24;
|
||||||
|
case iCalRecurrenceFrequenceHourly:
|
||||||
|
units *= 60;
|
||||||
|
case iCalRecurrenceFrequenceMinutely:
|
||||||
|
units *= 60;
|
||||||
|
case iCalRecurrenceFrequenceSecondly:
|
||||||
|
endOfFirstRange = [startDate dateByAddingYears: 0 months: 0 days: 0
|
||||||
|
hours: 0 minutes: 0
|
||||||
|
seconds: units];
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* month-based units */
|
||||||
|
case iCalRecurrenceFrequenceYearly:
|
||||||
|
units *= 12;
|
||||||
|
case iCalRecurrenceFrequenceMonthly:
|
||||||
|
endOfFirstRange = [startDate dateByAddingYears: 0 months: (units + 1)
|
||||||
|
days: 0
|
||||||
|
hours: 0 minutes: 0
|
||||||
|
seconds: 0];
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
endOfFirstRange = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endOfFirstRange)
|
||||||
|
{
|
||||||
|
range = [NGCalendarDateRange calendarDateRangeWithStartDate: startDate
|
||||||
|
endDate: endOfFirstRange];
|
||||||
|
firstInstanceRange = [NGCalendarDateRange calendarDateRangeWithStartDate: startDate
|
||||||
|
endDate: endDate];
|
||||||
|
recurrences = [iCalRecurrenceCalculator recurrenceRangesWithinCalendarDateRange: range
|
||||||
|
firstInstanceCalendarDateRange: firstInstanceRange
|
||||||
|
recurrenceRules: rules
|
||||||
|
exceptionRules: nil
|
||||||
|
exceptionDates: nil];
|
||||||
|
if ([recurrences count] > 0)
|
||||||
|
firstOccurrenceStartDate = [[recurrences objectAtIndex: 0]
|
||||||
|
startDate];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return firstOccurrenceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in New Issue