From 27b9b7bfa7a97635e0250a406eb4004078e3d571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 10 Aug 2015 18:38:39 +0200 Subject: [PATCH] oc-mail: Increase Change Number after modifying seen flag It is required when you are using SynchronizeImportReadStateChanges ROP to update the MetaTagCnsetRead meta property. See [MS-OXCFXICS] Section 3.2.5.9.4.6 This could lead to sync issues. --- OpenChange/MAPIStoreMailMessage.m | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 37d4fc420..08c12772a 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -1647,13 +1647,27 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) - (int) setReadFlag: (uint8_t) flag { + BOOL modified = NO; + BOOL alreadyRead = NO; NSString *imapFlag = @"\\Seen"; + alreadyRead = [[[sogoObject fetchCoreInfos] objectForKey: @"flags"] + containsObject: @"seen"]; + /* TODO: notifications should probably be emitted from here */ if (flag & CLEAR_READ_FLAG) - [sogoObject removeFlags: imapFlag]; + { + [sogoObject removeFlags: imapFlag]; + modified = alreadyRead; + } else - [sogoObject addFlags: imapFlag]; + { + [sogoObject addFlags: imapFlag]; + modified = !alreadyRead; + } + + if (modified) + [(MAPIStoreMailFolder *)[self container] synchroniseCache]; return MAPISTORE_SUCCESS; }