From f56f6174ebab6449a6aaee3bc4864b1f142b668b Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 11 Aug 2011 16:37:23 +0000 Subject: [PATCH] Monotone-Parent: 13c5aa721d9d4217c5d7294d7498865eadb1f488 Monotone-Revision: ac4faf22e87401aa7760c8fa7dd769a9bb1120fb Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-08-11T16:37:23 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 +++ OpenChange/MAPIStoreFolder.m | 28 ++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1b4b00e3..819548b79 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2011-08-11 Wolfgang Sourdeau + * OpenChange/MAPIStoreFolder.m (-objectVersion): implemented + method based on the value provided in the folder props dictionary. + * OpenChange/MAPIStoreObject.m (-objectVersion): now a mandatory method for subclasses. diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index ea7943800..3fe362d52 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -49,6 +49,7 @@ #include #undef DEBUG +#include #include #include #include @@ -143,6 +144,30 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe } /* backend interface */ +- (uint64_t) objectVersion +{ + NSNumber *value; + NSDictionary *props; + uint64_t cn; + + props = [propsMessage properties]; + value = [props objectForKey: MAPIPropertyKey (PR_CHANGE_NUM)]; + if (value) + cn = [value unsignedLongLongValue]; + else + { + [self logWithFormat: @"no value for PR_CHANGE_NUM, adding one now"]; + cn = [[self context] getNewChangeNumber]; + value = [NSNumber numberWithUnsignedLongLong: cn]; + props = [NSDictionary dictionaryWithObject: value + forKey: MAPIPropertyKey (PR_CHANGE_NUM)]; + [propsMessage appendProperties: props]; + [propsMessage save]; + } + + return cn >> 16; +} + - (id) lookupFolder: (NSString *) folderKey { MAPIStoreFolder *childFolder = nil; @@ -619,8 +644,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe { static enum MAPITAGS bannedProps[] = { PR_MID, PR_FID, PR_PARENT_FID, PR_SOURCE_KEY, PR_PARENT_SOURCE_KEY, - PR_CHANGE_NUM, PR_CHANGE_KEY, - 0x00000000 }; + PR_CHANGE_KEY, 0x00000000 }; enum MAPITAGS *currentProp; int rc;