diff --git a/ChangeLog b/ChangeLog index 7414eb7a4..8ca0bbb9e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2011-09-23 Wolfgang Sourdeau + * OpenChange/MAPIStoreGCSMessage.m (-getPrChangeKey:inMemCtx:): + first force a synchronisation of the parent cache if the change key + cannot be retrieved and invoke abort if the change key is still + not available afterwards. + + * OpenChange/MAPIStoreMailMessage.m (-getPrChangeKey:inMemCtx:): + same as above. + * OpenChange/MAPIStoreMailFolder.m (-lastMessageModificationTime): invoke "synchroniseCache" in order to make sure we return the real last modification time. diff --git a/OpenChange/MAPIStoreGCSMessage.m b/OpenChange/MAPIStoreGCSMessage.m index ac4babe3f..0f7828adc 100644 --- a/OpenChange/MAPIStoreGCSMessage.m +++ b/OpenChange/MAPIStoreGCSMessage.m @@ -52,13 +52,21 @@ { int rc = MAPISTORE_SUCCESS; NSData *changeKey; + MAPIStoreGCSFolder *parentFolder; + NSString *nameInContainer; if (isNew) rc = MAPISTORE_ERR_NOT_FOUND; else { - changeKey = [(MAPIStoreGCSFolder *)[self container] - changeKeyForMessageWithKey: [self nameInContainer]]; + parentFolder = (MAPIStoreGCSFolder *)[self container]; + nameInContainer = [self nameInContainer]; + changeKey = [parentFolder changeKeyForMessageWithKey: nameInContainer]; + if (!changeKey) + { + [parentFolder synchroniseCache]; + changeKey = [parentFolder changeKeyForMessageWithKey: nameInContainer]; + } if (!changeKey) abort (); *data = [changeKey asBinaryInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 3fba97852..57cd1af34 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -284,13 +284,21 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) { int rc = MAPISTORE_SUCCESS; NSData *changeKey; + MAPIStoreMailFolder *parentFolder; + NSString *nameInContainer; if (isNew) rc = MAPISTORE_ERR_NOT_FOUND; else { - changeKey = [(MAPIStoreMailFolder *)[self container] - changeKeyForMessageWithKey: [self nameInContainer]]; + parentFolder = (MAPIStoreMailFolder *)[self container]; + nameInContainer = [self nameInContainer]; + changeKey = [parentFolder changeKeyForMessageWithKey: nameInContainer]; + if (!changeKey) + { + [parentFolder synchroniseCache]; + changeKey = [parentFolder changeKeyForMessageWithKey: nameInContainer]; + } if (!changeKey) abort (); *data = [changeKey asBinaryInMemCtx: memCtx];