diff --git a/OpenChange/MAPIStoreFolder.h b/OpenChange/MAPIStoreFolder.h index 94a1cb634..e5440bd95 100644 --- a/OpenChange/MAPIStoreFolder.h +++ b/OpenChange/MAPIStoreFolder.h @@ -150,6 +150,7 @@ /* helpers */ - (uint64_t) idForObjectWithKey: (NSString *) childKey; +- (MAPIStoreFolder *) rootContainer; /* subclasses */ - (MAPIStoreMessage *) createMessage; diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 5bc292458..644f88965 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -1885,6 +1885,17 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe inFolderURL: [self url]]; } +- (MAPIStoreFolder *) rootContainer +{ + /* Return the oldest ancestor, which does not have + container. If there is not container, it returns itself. + */ + if (container) + return [container rootContainer]; + else + return self; +} + - (NSDate *) creationTime { return [dbFolder creationDate]; diff --git a/OpenChange/MAPIStoreMailFolder.m b/OpenChange/MAPIStoreMailFolder.m index 2d4a20fbb..99d2d3274 100644 --- a/OpenChange/MAPIStoreMailFolder.m +++ b/OpenChange/MAPIStoreMailFolder.m @@ -682,9 +682,9 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data) { /* This method should be called whenever something has changed on the folder. Then we will perform two actions: - 1 - Update its PidTagChangeNumber property. + 1 - Update the PidTagChangeNumber property of the root container. 2 - Store relationship PidTagChangenumber with lastModseq value on the - mapping given as parameter */ + mapping given as parameter for this folder */ uint64_t *current_cn; struct SRow row; struct SPropValue prop; @@ -699,10 +699,11 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data) prop.value.d = 0; // It doesn't matter, it will be autogenerated row.lpProps = ∝ - /* We are doing a "touch" operation to update change number of this folder */ + /* We are doing a "touch" operation to update change number of the root container. + We get the root container as it has the properties in the OpenChange DB */ username = [[self context] connectionInfo]->username; oc_ctx = [[self context] connectionInfo]->oc_ctx; - fid = [self objectId]; + fid = [[self rootContainer] objectId]; retval = openchangedb_set_folder_properties(oc_ctx, username, fid, &row); if (retval != MAPI_E_SUCCESS) {