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;