diff --git a/ChangeLog b/ChangeLog index 04c3bb61b..a102d10b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-08-12 Wolfgang Sourdeau + * OpenChange/MAPIStoreGCSMessage.m (-objectVersion): ensure that a + change number is available when the message is "not new", but + resynchronise the cache in doing so. + * OpenChange/MAPIStoreSOGo.m (sogo_table_handle_destructor): added new backend operation. diff --git a/OpenChange/MAPIStoreGCSMessage.m b/OpenChange/MAPIStoreGCSMessage.m index 6bafbea2a..d6142a477 100644 --- a/OpenChange/MAPIStoreGCSMessage.m +++ b/OpenChange/MAPIStoreGCSMessage.m @@ -21,6 +21,7 @@ */ #import +#import #import #import "MAPIStoreGCSFolder.h" @@ -48,12 +49,28 @@ uint64_t version = 0xffffffffffffffffLL; NSNumber *changeNumber; - changeNumber = [(MAPIStoreGCSFolder *) container - changeNumberForMessageWithKey: [self nameInContainer]]; - if (changeNumber) - version = [changeNumber unsignedLongLongValue] >> 16; - else if (![sogoObject isNew]) - abort (); + if (![sogoObject isNew]) + { + changeNumber = [(MAPIStoreGCSFolder *) container + changeNumberForMessageWithKey: [self nameInContainer]]; + if (!changeNumber) + { + [self warnWithFormat: @"attempting to get change number" + @" by synchronising folder..."]; + [(MAPIStoreGCSFolder *) container synchroniseCache]; + changeNumber = [(MAPIStoreGCSFolder *) container + changeNumberForMessageWithKey: [self nameInContainer]]; + + if (changeNumber) + [self logWithFormat: @"got one"]; + else + { + [self errorWithFormat: @"still nothing. We crash!"]; + abort (); + } + } + version = [changeNumber unsignedLongLongValue] >> 16; + } return version; }