diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index cadd7af40..a137c046a 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,22 @@ +2008-12-10 Wolfgang Sourdeau + + * iCalYearlyRecurrenceCalculator.m + ([iCalYearlyRecurrenceCalculator -lastInstanceStartDate]): same as + below. + + * iCalMonthlyRecurrenceCalculator.m + ([iCalMonthlyRecurrenceCalculator -lastInstanceStartDate]): same + as below. + + * iCalWeeklyRecurrenceCalculator.m + ([iCalWeeklyRecurrenceCalculator -lastInstanceStartDate]): same as + below. + + * iCalDailyRecurrenceCalculator.m ([iCalDailyRecurrenceCalculator + -lastInstanceStartDate]): return a date based on the start date, + instead of julian calculations, to avoid losing the original date + timezone. + 2008-08-18 Ludovic Marcotte * NSString+NGCards.m ([NSString -unescapedFromCard]): added code diff --git a/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m b/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m index 6ff51d08e..4949e712f 100644 --- a/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m @@ -484,25 +484,23 @@ static void NGMonthDaySet_fillWithByDayX (NGMonthDaySet *daySet, return ranges; } -- (NSCalendarDate *) lastInstanceStartDate +- (NSCalendarDate *) lastInstanceStartDate { + NSCalendarDate *firStart, *lastInstanceStartDate; + if ([rrule repeatCount] > 0) { - NSCalendarDate *until; - unsigned months, interval; - - interval = [rrule repeatInterval]; - months = [rrule repeatCount] - 1 /* the first counts as one! */; - - if (interval > 0) - months *= interval; - - until = [[firstRange startDate] dateByAddingYears: 0 - months: months - days: 0]; - return until; + firStart = [firstRange startDate]; + + lastInstanceStartDate = [firStart dateByAddingYears: 0 + months: ([rrule repeatInterval] + * [rrule repeatCount]) + days: 0]; } - return [super lastInstanceStartDate]; + else + lastInstanceStartDate = [super lastInstanceStartDate]; + + return lastInstanceStartDate; } @end /* iCalMonthlyRecurrenceCalculator */ diff --git a/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m b/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m index 4c3ac9421..5de713d8d 100644 --- a/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m @@ -185,25 +185,22 @@ return ranges; } -- (NSCalendarDate *) lastInstanceStartDate +- (NSCalendarDate *) lastInstanceStartDate { + NSCalendarDate *firStart, *lastInstanceStartDate; + if ([rrule repeatCount] > 0) { - long jnFirst, jnRuleLast; - NSCalendarDate *firStart, *until; - firStart = [firstRange startDate]; - jnFirst = [firStart julianNumber]; - jnRuleLast = ([rrule repeatInterval] * - [rrule repeatCount] * 7) + - jnFirst; - until = [NSCalendarDate dateForJulianNumber: jnRuleLast]; - until = [until hour: [firStart hourOfDay] - minute: [firStart minuteOfHour] - second: [firStart secondOfMinute]]; - return until; + + lastInstanceStartDate = [firStart dateByAddingYears: 0 months: 0 + days: (7 * [rrule repeatInterval] + * [rrule repeatCount])]; } - return [super lastInstanceStartDate]; + else + lastInstanceStartDate = [super lastInstanceStartDate]; + + return lastInstanceStartDate; } @end /* iCalWeeklyRecurrenceCalculator */ diff --git a/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m b/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m index 12112b0f2..d7c34d2ad 100644 --- a/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m @@ -90,19 +90,22 @@ - (NSCalendarDate *) lastInstanceStartDate { - if ([rrule repeatCount] > 0) + NSCalendarDate *firStart, *lastInstanceStartDate; + + if ([rrule repeatCount] > 0) { - NSCalendarDate *until; - unsigned years, interval; - - interval = [rrule repeatInterval]; - years = [rrule repeatCount] * interval; - until = [[firstRange startDate] dateByAddingYears: years - months: 0 - days: 0]; - return until; + firStart = [firstRange startDate]; + + lastInstanceStartDate + = [firStart dateByAddingYears: ([rrule repeatInterval] + * [rrule repeatCount]) + months: 0 + days: 0]; } - return [super lastInstanceStartDate]; + else + lastInstanceStartDate = [super lastInstanceStartDate]; + + return lastInstanceStartDate; } @end /* iCalYearlyRecurrenceCalculator */