From 3a315446b092106d06cca4c04702da4d0f8a90f7 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 20 Mar 2012 18:56:44 +0000 Subject: [PATCH] Monotone-Parent: c80a840b806ab1a13914a35d5bde6a6668427240 Monotone-Revision: 0917b3278898caa0cb56a12a960275816f5ab396 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-20T18:56:44 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 2 ++ OpenChange/MAPIStoreCalendarMessage.m | 28 ++++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index c3fa5ac93..92f50891c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * OpenChange/MAPIStoreCalendarMessage.m (-getPidLidAppointmentSequence:inMemCtx:): new getter. + (-save): properly initialize CREATED, LAST-MODIFIED, DTSTAMP and + SEQUENCE from MAPI properties. * OpenChange/MAPIStoreAppointmentWrapper.m (-getPidLidAppointmentSequence:inMemCtx:): new getter. diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 15ccb6437..004a30afc 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -725,14 +725,28 @@ vCalendar = [newEvent parent]; [vCalendar setProdID: @"-//Inverse inc.//OpenChange+SOGo//EN"]; [newEvent setCreated: now]; + // CREATED = PidTagCreationTime + value = [properties objectForKey: MAPIPropertyKey (PidTagCreationTime)]; + if (value) + [newEvent setCreated: value]; [newEvent setUid: uid]; content = [vCalendar versitString]; } vCalendar = [iCalCalendar parseSingleFromSource: content]; newEvent = [[vCalendar events] objectAtIndex: 0]; - [newEvent setTimeStampAsDate: now]; - [newEvent setLastModified: now]; + + // DTSTAMP = PidLidOwnerCriticalChange or PidLidAttendeeCriticalChange + value = [properties objectForKey: MAPIPropertyKey (PidLidOwnerCriticalChange)]; + if (!value || [value isNever]) + value = now; + [newEvent setTimeStampAsDate: value]; + + // LAST-MODIFIED = PidTagLastModificationTime + value = [properties objectForKey: MAPIPropertyKey (PidTagLastModificationTime)]; + if (!value) + value = now; + [newEvent setLastModified: value]; // summary value = [properties @@ -980,6 +994,11 @@ [newEvent setOrganizer: nil]; else { + // SEQUENCE = PidLidAppointmentSequence + value = [properties objectForKey: MAPIPropertyKey (PidLidAppointmentSequence)]; + if (value) + [newEvent setSequence: value]; + ownerUser = [[self userContext] sogoUser]; if (organizerIsSet) { @@ -1016,7 +1035,10 @@ } [person setParticipationStatus: newPartStat]; newParticipationStatus = [person partStatWithDefault]; - + + value = [properties objectForKey: MAPIPropertyKey (PidLidAttendeeCriticalChange)]; + if (value && ![value isNever]) + [newEvent setTimeStampAsDate: value]; // if (newPartStat // != iCalPersonPartStatUndefined // ) // {