diff --git a/ActiveSync/iCalRecurrenceRule+ActiveSync.m b/ActiveSync/iCalRecurrenceRule+ActiveSync.m index 621d6f810e..ca17fcff9c 100644 --- a/ActiveSync/iCalRecurrenceRule+ActiveSync.m +++ b/ActiveSync/iCalRecurrenceRule+ActiveSync.m @@ -37,11 +37,25 @@ #import #import +#import +#import + #import "NSCalendarDate+ActiveSync.h" #import "NSDate+ActiveSync.h" @implementation iCalRecurrenceRule (ActiveSync) +- (NSCalendarDate *) _adjustedStartDate +{ + iCalTimeZone *timeZone; + + timeZone = [(iCalDateTime *)[[self parent] firstChildWithTag: @"dtstart"] timeZone]; + if (timeZone) + return [timeZone computedDateForDate: [[self parent] startDate]]; + else + return [[self parent] startDate]; +} + - (NSString *) activeSyncRepresentationInContext: (WOContext *) context { NSMutableString *s; @@ -90,7 +104,7 @@ - (NSString *) activeSyncRepresentationInContext: (WOContext *) context { // No byDayMask, we take the event's start date to compute the DayOfWeek // 0 == Sunday, 6 == Saturday - v = (1 << [[[self parent] startDate] dayOfWeek]); + v = (1 << [[self _adjustedStartDate] dayOfWeek]); } [s appendFormat: @"%d", v]; @@ -139,8 +153,7 @@ - (NSString *) activeSyncRepresentationInContext: (WOContext *) context { // Simple reccurrence rule of type "Monthly" type = 2; - [s appendFormat: @"%d", - (int)[[[self parent] startDate] dayOfMonth]]; + [s appendFormat: @"%d", [[self _adjustedStartDate] dayOfMonth]]; } } else if ([self frequency] == iCalRecurrenceFrequenceYearly) @@ -178,10 +191,8 @@ - (NSString *) activeSyncRepresentationInContext: (WOContext *) context else { type = 5; - [s appendFormat: @"%d", - (int)[[[self parent] startDate] dayOfMonth]]; - [s appendFormat: @"%d", - (int)[[[self parent] startDate] monthOfYear]]; + [s appendFormat: @"%d", [[self _adjustedStartDate] dayOfMonth]]; + [s appendFormat: @"%d", [[self _adjustedStartDate] monthOfYear]]; } } diff --git a/ActiveSync/iCalTimeZone+ActiveSync.m b/ActiveSync/iCalTimeZone+ActiveSync.m index c4c0071fdd..117c0c06dc 100644 --- a/ActiveSync/iCalTimeZone+ActiveSync.m +++ b/ActiveSync/iCalTimeZone+ActiveSync.m @@ -128,7 +128,7 @@ - (NSString *) activeSyncRepresentationInContext: (WOContext *) context //uint16_t wStandardYear; struct SYSTEMTIME stStandardDate; //uint16_t wDaylightYear; - struct SYSTEMTIME stDaylightDate; + struct SYSTEMTIME stDaylightDate = {0,0,0,0,0,0,0,0}; char standardName[64], daylightName[64]; @@ -144,13 +144,17 @@ - (NSString *) activeSyncRepresentationInContext: (WOContext *) context period = [self _mostRecentPeriodWithName: @"DAYLIGHT"]; if (!period) - stStandardDate.wMonth = 0; - - lDaylightBias = (uint32_t) -([period secondsOffsetFromGMT] / 60) - lBias; - [period _fillTZDate: &stDaylightDate]; - //wStandardYear = stStandardDate.wYear; - //wDaylightYear = stDaylightDate.wYear; - + { + stStandardDate.wMonth = 0; + lDaylightBias = 0; + } + else + { + lDaylightBias = (uint32_t) -([period secondsOffsetFromGMT] / 60) - lBias; + [period _fillTZDate: &stDaylightDate]; + //wStandardYear = stStandardDate.wYear; + //wDaylightYear = stDaylightDate.wYear; + } // We build the timezone [bytes appendBytes: &lBias length: 4];