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 // ) // {