From c893963da592bc56d0d95b7c18e7085907a9fdeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Fri, 16 Jan 2015 00:09:01 +0100 Subject: [PATCH] oc-tasks: Set right start, due and complete dates As explained in [MS-OXOTASK], we have to shift the given date to store the right point in time with the correct timezone. --- OpenChange/MAPIStoreTasksMessage.m | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/OpenChange/MAPIStoreTasksMessage.m b/OpenChange/MAPIStoreTasksMessage.m index 9215bc409..20bf67f8b 100644 --- a/OpenChange/MAPIStoreTasksMessage.m +++ b/OpenChange/MAPIStoreTasksMessage.m @@ -367,13 +367,15 @@ NSString *status, *priority, *tzName; NSCalendarDate *now; NSInteger tzOffset; + NSTimeZone *userTZ; double doubleValue; vToDo = [sogoObject component: YES secure: NO]; vCalendar = [vToDo parent]; [vCalendar setProdID: @"-//Inverse inc.//OpenChange+SOGo//EN"]; - tzName = [[[self userContext] timeZone] name]; + userTZ = [[self userContext] timeZone]; + tzName = [userTZ name]; tz = [iCalTimeZone timeZoneForName: tzName]; [vCalendar addTimeZone: tz]; @@ -428,6 +430,13 @@ { date = (iCalDateTime *) [vToDo uniqueChildWithTag: @"dtstart"]; [date setTimeZone: tz]; + /* The property is set to user's local time zone. + See: [MS-OXOTASK] 2.2.2.2.4 + TODO: Ignore when the PT_SYSTIME is 0x5AE980E0*/ + tzOffset = [userTZ secondsFromGMTForDate: value]; + value = [value dateByAddingYears: 0 months: 0 days: 0 + hours: 0 minutes: 0 + seconds: -tzOffset]; [date setDateTime: value]; } @@ -437,6 +446,13 @@ { date = (iCalDateTime *) [vToDo uniqueChildWithTag: @"due"]; [date setTimeZone: tz]; + /* The property is set to user's local time zone. + See: [MS-OXOTASK] 2.2.2.2.5 + TODO: Ignore when the PT_SYSTIME is 0x5AE980E0*/ + tzOffset = [userTZ secondsFromGMTForDate: value]; + value = [value dateByAddingYears: 0 months: 0 days: 0 + hours: 0 minutes: 0 + seconds: -tzOffset]; [date setDateTime: value]; } @@ -445,7 +461,9 @@ if (value) { date = (iCalDateTime *) [vToDo uniqueChildWithTag: @"completed"]; - tzOffset = [[value timeZone] secondsFromGMTForDate: value]; + /* The property is set to midnight in local time zone converted to UTC: + See: [MS-OXOTASK] 2.2.2.2.9 */ + tzOffset = [userTZ secondsFromGMTForDate: value]; value = [value dateByAddingYears: 0 months: 0 days: 0 hours: 0 minutes: 0 seconds: -tzOffset];