From b428b0a03518f3d4c362466bbc19af6f462355fc Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 14 Dec 2010 20:55:53 +0000 Subject: [PATCH] Monotone-Parent: e2fd5b7d6dbc16ef0f63bc708e3594f79cb126a0 Monotone-Revision: c719bad753884d3a6d304371bd3da1fe92ae26a9 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-12-14T20:55:53 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 +++ OpenChange/MAPIStoreMailContext.m | 42 +++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/ChangeLog b/ChangeLog index cd347cf23..9ab0d0c97 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2010-12-14 Wolfgang Sourdeau + * OpenChange/MAPIStoreMailContext.m + (-evaluateContentRestriction:intoQualifier:): new overriden method + handling tests on the PR_MESSAGE_CLASS_UNICODE property. + * OpenChange/EOQualifier+MAPIFS.m (-[EOBitmaskQualifier _evaluateMAPIFSMessageProperties:]): new method adapted to the new class below. diff --git a/OpenChange/MAPIStoreMailContext.m b/OpenChange/MAPIStoreMailContext.m index f051f69ef..9841648be 100644 --- a/OpenChange/MAPIStoreMailContext.m +++ b/OpenChange/MAPIStoreMailContext.m @@ -22,6 +22,7 @@ #import #import +#import #import @@ -51,8 +52,16 @@ #include #include +static Class NSDataK, NSStringK; + @implementation MAPIStoreMailContext ++ (void) initialize +{ + NSDataK = [NSData class]; + NSStringK = [NSString class]; +} + + (NSString *) MAPIModuleName { return @"mail"; @@ -588,6 +597,39 @@ return rc; } +- (MAPIRestrictionState) evaluateContentRestriction: (struct mapi_SContentRestriction *) res + intoQualifier: (EOQualifier **) qualifier +{ + MAPIRestrictionState rc; + id value; + + value = NSObjectFromMAPISPropValue (&res->lpProp); + if ([value isKindOfClass: NSDataK]) + { + value = [[NSString alloc] initWithData: value + encoding: NSUTF8StringEncoding]; + [value autorelease]; + } + else if (![value isKindOfClass: NSStringK]) + [NSException raise: @"MAPIStoreTypeConversionException" + format: @"unhandled content restriction for class '%@'", + NSStringFromClass ([value class])]; + + switch (res->ulPropTag) + { + case PR_MESSAGE_CLASS_UNICODE: + if ([value isEqualToString: @"IPM.Note"]) + rc = MAPIRestrictionStateAlwaysTrue; + else + rc = MAPIRestrictionStateAlwaysFalse; + break; + default: + rc = [super evaluateContentRestriction: res intoQualifier: qualifier]; + } + + return rc; +} + - (MAPIRestrictionState) evaluateExistRestriction: (struct mapi_SExistRestriction *) res intoQualifier: (EOQualifier **) qualifier {