Monotone-Parent: 3fdbf80f4c1de08138ff9435f54fd9f663ef5b8f

Monotone-Revision: 3bc92406543042dce09f1c096eb8a19107b42eb2

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-07-20T14:36:05
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2012-07-20 14:36:05 +00:00
parent 7bb437021a
commit 63c2d62b0b
5 changed files with 66 additions and 2 deletions

View File

@ -1,5 +1,17 @@
2012-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/NSObject+MAPIStore.m
(+fillAvailableProperties:withExclusions:): new method that fills
an existing array of properties with properties existing in
another class, as long as they are not listed in the array of
exclusions.
* OpenChange/MAPIStoreObject.m (-init): assigned a mutable array
to "proxies"
(-canGetProperty:): test the proxies for the availability of
properties so that -getAvailableProperties:inMemCtx: can return an
accurate result.
* OpenChange/MAPIStoreMessage.m (-getPidTagSubject:inMemCtx:): now
compute the return value based on PidTagNormalizedSubject and
PidTagSubjectPrefix as PidTagSubject is never actually set from

View File

@ -87,6 +87,22 @@
@implementation MAPIStoreCalendarMessage
+ (enum mapistore_error) getAvailableProperties: (struct SPropTagArray **) propertiesP
inMemCtx: (TALLOC_CTX *) memCtx
{
BOOL listedProperties[65536];
NSUInteger count;
memset (listedProperties, NO, 65536 * sizeof (BOOL));
[super getAvailableProperties: propertiesP inMemCtx: memCtx];
for (count = 0; count < (*propertiesP)->cValues; count++)
listedProperties[(*propertiesP)->aulPropTag[count] >> 16] = YES;
[MAPIStoreAppointmentWrapper fillAvailableProperties: *propertiesP
withExclusions: listedProperties];
return MAPISTORE_SUCCESS;
}
- (id) initWithSOGoObject: (id) newSOGoObject
inContainer: (MAPIStoreObject *) newFolder
{

View File

@ -76,6 +76,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
parentContainersBag = [NSMutableArray new];
container = nil;
properties = [NSMutableDictionary new];
proxies = [NSMutableArray new];
}
// [self logWithFormat: @"-init"];
@ -96,6 +97,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
- (void) dealloc
{
// [self logWithFormat: @"-dealloc"];
[proxies release];
[properties release];
[parentContainersBag release];
[container release];
@ -203,11 +205,18 @@ static Class NSExceptionK, MAPIStoreFolderK;
- (BOOL) canGetProperty: (enum MAPITAGS) propTag
{
uint16_t propValue;
BOOL canGetProperty;
NSUInteger count, max;
propValue = (propTag & 0xffff0000) >> 16;
return (classGetters[propValue]
|| [properties objectForKey: MAPIPropertyKey (propTag)]);
canGetProperty = (classGetters[propValue]
|| [properties objectForKey: MAPIPropertyKey (propTag)]);
max = [proxies count];
for (count = 0; !canGetProperty && count < max; count++)
canGetProperty = [[proxies objectAtIndex: count] canGetProperty: propTag];
return canGetProperty;
}
- (int) getProperties: (struct mapistore_property_data *) data

View File

@ -63,6 +63,9 @@ struct MAPIStoreTallocWrapper
+ (enum mapistore_error) getAvailableProperties: (struct SPropTagArray **) propertiesP
inMemCtx: (TALLOC_CTX *) memCtx;
+ (void) fillAvailableProperties: (struct SPropTagArray *) properties
withExclusions: (BOOL *) exclusions;
- (enum mapistore_error) getAvailableProperties: (struct SPropTagArray **) propertiesP
inMemCtx: (TALLOC_CTX *) memCtx;
- (BOOL) canGetProperty: (enum MAPITAGS) propTag;

View File

@ -201,6 +201,30 @@ MAPIStoreTallocWrapperDestroy (void *data)
return MAPISTORE_SUCCESS;
}
+ (void) fillAvailableProperties: (struct SPropTagArray *) properties
withExclusions: (BOOL *) exclusions
{
TALLOC_CTX *localMemCtx;
struct SPropTagArray *subProperties;
uint16_t propId;
NSUInteger count;
localMemCtx = talloc_zero (NULL, TALLOC_CTX);
[self getAvailableProperties: &subProperties inMemCtx: localMemCtx];
for (count = 0; count < subProperties->cValues; count++)
{
propId = (subProperties->aulPropTag[count] >> 16);
if (!exclusions[propId])
{
properties->aulPropTag[properties->cValues]
= subProperties->aulPropTag[count];
properties->cValues++;
exclusions[propId] = YES;
}
}
talloc_free (localMemCtx);
}
- (enum mapistore_error) getAvailableProperties: (struct SPropTagArray **) propertiesP
inMemCtx: (TALLOC_CTX *) memCtx
{