Monotone-Parent: d0b2cce64733874b10da170e30bdcb9f9730f61e

Monotone-Revision: d807738c8f35c5080fb2e1684404fb8d992c8032

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-01-12T16:06:57
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2012-01-12 16:06:57 +00:00
parent a1cd165aa0
commit 56ad0c3289
3 changed files with 52 additions and 17 deletions

View File

@ -1,5 +1,12 @@
2012-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreCalendarMessage.m (-save): same as below +
ensure that nil fields are removed from non-new instances.
* OpenChange/MAPIStoreAppointmentWrapper.m
(-getPrStartDate:inMemCtx:, -getPrEndDate:inMemCtx:): remove the
tz offset from dates in all-day events.
* OpenChange/MAPIStoreTasksMessage.m (-save): the dates provided
by Outlook for start, due and completed are all-day dates, we thus
need to remove the timezone offset from those dates.

View File

@ -638,11 +638,19 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: (TALLOC_CTX *) memCtx
{
NSCalendarDate *dateValue;
NSInteger offset;
if ([event isRecurrent])
dateValue = [event firstRecurrenceStartDate];
else
dateValue = [event startDate];
if ([event isAllDay])
{
offset = -[timeZone secondsFromGMTForDate: dateValue];
dateValue = [dateValue dateByAddingYears: 0 months: 0 days: 0
hours: 0 minutes: 0
seconds: offset];
}
[dateValue setTimeZone: utcTZ];
*data = [dateValue asFileTimeInMemCtx: memCtx];
@ -882,16 +890,18 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: (TALLOC_CTX *) memCtx
{
NSCalendarDate *dateValue;
NSInteger offset;
if ([event isRecurrent])
dateValue = [event firstRecurrenceStartDate];
else
dateValue = [event startDate];
dateValue
= [dateValue dateByAddingYears: 0 months: 0 days: 0
hours: 0 minutes: 0
seconds: (NSInteger) [event
durationAsTimeInterval]];
offset = [event durationAsTimeInterval];
if ([event isAllDay])
offset -= [timeZone secondsFromGMTForDate: dateValue];
dateValue = [dateValue dateByAddingYears: 0 months: 0 days: 0
hours: 0 minutes: 0
seconds: offset];
[dateValue setTimeZone: utcTZ];
*data = [dateValue asFileTimeInMemCtx: memCtx];

View File

@ -207,7 +207,8 @@
- (int) getPidLidAppointmentSubType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPidLidAppointmentSubType: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidLidAppointmentSubType: data
inMemCtx: memCtx];
}
- (int) getPidLidBusyStatus: (void **) data // TODO
@ -653,6 +654,7 @@
iCalEvent *newEvent;
iCalPerson *userPerson;
NSUInteger responseStatus = 0;
NSInteger tzOffset;
SOGoUser *activeUser, *ownerUser;
id value;
@ -747,10 +749,11 @@
if (value)
[newEvent setLocation: value];
isAllDay = [[properties
objectForKey: MAPIPropertyKey (PidLidAppointmentSubType)]
boolValue];
isAllDay = [newEvent isAllDay];
value = [properties
objectForKey: MAPIPropertyKey (PidLidAppointmentSubType)];
if (value)
isAllDay = [value boolValue];
if (!isAllDay)
{
tzName = [[self ownerTimeZone] name];
@ -767,7 +770,14 @@
{
start = (iCalDateTime *) [newEvent uniqueChildWithTag: @"dtstart"];
if (isAllDay)
[start setDate: value];
{
tzOffset = [[value timeZone] secondsFromGMTForDate: value];
value = [value dateByAddingYears: 0 months: 0 days: 0
hours: 0 minutes: 0
seconds: -tzOffset];
[start setTimeZone: nil];
[start setDate: value];
}
else
{
[start setTimeZone: tz];
@ -776,14 +786,21 @@
}
/* end */
value = [properties objectForKey: MAPIPropertyKey(PR_END_DATE)];
value = [properties objectForKey: MAPIPropertyKey (PR_END_DATE)];
if (!value)
value = [properties objectForKey: MAPIPropertyKey(PidLidAppointmentEndWhole)];
value = [properties objectForKey: MAPIPropertyKey (PidLidAppointmentEndWhole)];
if (value)
{
end = (iCalDateTime *) [newEvent uniqueChildWithTag: @"dtend"];
if (isAllDay)
[end setDate: value];
{
tzOffset = [[value timeZone] secondsFromGMTForDate: value];
value = [value dateByAddingYears: 0 months: 0 days: 0
hours: 0 minutes: 0
seconds: -tzOffset];
[end setTimeZone: nil];
[end setDate: value];
}
else
{
[end setTimeZone: tz];
@ -840,13 +857,14 @@
if (value)
{
value = [[NSString alloc] initWithData: value
encoding: NSUTF8StringEncoding];
encoding: NSUTF8StringEncoding];
[value autorelease];
value = [value htmlToText];
}
}
if (value)
[newEvent setComment: value];
if (value && [value length] == 0)
value = nil;
[newEvent setComment: value];
/* recurrence */
value = [properties