Monotone-Parent: d0b2cce64733874b10da170e30bdcb9f9730f61e
Monotone-Revision: d807738c8f35c5080fb2e1684404fb8d992c8032 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-01-12T16:06:57 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
a1cd165aa0
commit
56ad0c3289
|
@ -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.
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue