From efdee42ebae46df271d5e201134ccb4045c4e13f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 12 Aug 2011 18:40:07 +0000 Subject: [PATCH] Monotone-Parent: 9a2499685fbc7c107c6a8a04f34c7435343e64f4 Monotone-Revision: 24436aa1f7c157e01afd314ceccdf0d59418faa7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-08-12T18:40:07 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 ++++ OpenChange/MAPIStoreGCSMessage.m | 29 +++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) 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; }