From 3a60b6e38edbff5edc0d2836745ef1da702f4237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 24 Aug 2015 12:30:50 +0200 Subject: [PATCH] oc-mail: Implement ChangeNumber >= restriction And warn when other operator than > or >= is used. This allows OpenChange to query for change numbers starting from a given point. --- OpenChange/MAPIStoreMailMessageTable.m | 29 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/OpenChange/MAPIStoreMailMessageTable.m b/OpenChange/MAPIStoreMailMessageTable.m index c13605829..c71097d63 100644 --- a/OpenChange/MAPIStoreMailMessageTable.m +++ b/OpenChange/MAPIStoreMailMessageTable.m @@ -161,15 +161,30 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK; //[self logWithFormat: @"change number from oxcfxics: %.16lx", [value unsignedLongLongValue]]; //[self logWithFormat: @" modseq: %.16lx", [modseq unsignedLongLongValue]]; if (modseq) - modseq = [NSNumber numberWithUnsignedLongLong: - [modseq unsignedLongLongValue] + 1]; + { + if (res->relop == RELOP_GT) + modseq = [NSNumber numberWithUnsignedLongLong: + [modseq unsignedLongLongValue] + 1]; + + } else modseq = [NSNumber numberWithUnsignedLongLong: 0]; - *qualifier = [[EOKeyValueQualifier alloc] initWithKey: @"MODSEQ" - operatorSelector: EOQualifierOperatorGreaterThanOrEqualTo - value: modseq]; - [*qualifier autorelease]; - rc = MAPIRestrictionStateNeedsEval; + + if (res->relop == RELOP_GT || res->relop == RELOP_GE) + { + *qualifier = [[EOKeyValueQualifier alloc] initWithKey: @"MODSEQ" + operatorSelector: EOQualifierOperatorGreaterThanOrEqualTo + value: modseq]; + [*qualifier autorelease]; + rc = MAPIRestrictionStateNeedsEval; + } + else + { + /* Ignore other operations as IMAP only support MODSEQ >= X */ + [self warnWithFormat: @"Ignoring %@ as only supported operators are > and >=", + [self operatorFromRestrictionOperator: res->relop]]; + rc = MAPIRestrictionStateAlwaysTrue; + } } break;