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 {