From 1e8127b46122e83df02c394536950288b0ee16aa Mon Sep 17 00:00:00 2001 From: Hivert Quentin Date: Thu, 16 Nov 2023 11:18:23 +0100 Subject: [PATCH] fix(calendar): properly set the start date range for yearly events --- SOPE/NGCards/iCalYearlyRecurrenceCalculator.m | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m b/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m index 5c1569c61..5e4fadc6f 100644 --- a/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalYearlyRecurrenceCalculator.m @@ -44,10 +44,11 @@ { NSMutableArray *ranges; NSArray *byMonth; - NSCalendarDate *firStart, *lastDate, *rStart, *rEnd, *until, *referenceDate; + NSCalendarDate *firStart, *lastDate, *rStart, *rEnd, *until, *referenceDate, *rTemp; + NSInteger *hoursOfOffset; iCalMonthlyRecurrenceCalculator *monthlyCalc; unsigned j, yearIdxInRange, numberOfYearsInRange, count, interval, monthDiff; - int diff, repeatCount, currentMonth; + int diff, repeatCount, currentMonth, origNbDaysInMonth; firStart = [firstRange startDate]; rStart = [_r startDate]; @@ -186,18 +187,31 @@ days: 0]; - //Due to the bug with dateByAddingYears, we have to take off one day (see line 133) - rStart = [NSCalendarDate dateWithYear: [rStart yearOfCommonEra] - month: [rStart monthOfYear] - day: 0 - hour: [rStart hourOfDay] - minute: [rStart minuteOfHour] - second: 0 - timeZone: [rStart timeZone]]; + //Due to the bug with dateByAddingYears, we may take the previous day (see line 133) + hoursOfOffset = [rStart hourOfDay]; + origNbDaysInMonth = [rStart numberOfDaysInMonth]; + if(hoursOfOffset > 12) { + //If rStart is 1st 22:00, we should start at the previous day 22:00 + rTemp = [NSCalendarDate dateWithYear: [rStart yearOfCommonEra] + month: 1+([rStart monthOfYear]-2)%12 + day: 1 + hour: [rStart hourOfDay] + minute: [rStart minuteOfHour] + second: 0 + timeZone: [rStart timeZone]]; + rStart = [NSCalendarDate dateWithYear: [rStart yearOfCommonEra] + month: 1+([rStart monthOfYear]-2)%12 + day: [rTemp numberOfDaysInMonth] + hour: [rStart hourOfDay] + minute: [rStart minuteOfHour] + second: 0 + timeZone: [rStart timeZone]]; + } + rEnd = [rStart dateByAddingYears: 0 months: 0 - days: [rStart numberOfDaysInMonth]]; + days: origNbDaysInMonth]; rangeForMonth = [NGCalendarDateRange calendarDateRangeWithStartDate: rStart