Monotone-Parent: 40480465ce4ec6f36665568ed685c71f37abb04a

Monotone-Revision: 3d47f593fbb200a77cb1c9523f3d158473420274

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-02-14T14:58:34
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2012-02-14 14:58:34 +00:00
parent 0d1f0fc513
commit 186023c961
3 changed files with 69 additions and 26 deletions

View File

@ -1,5 +1,15 @@
2012-02-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreMailFolder.m (-ensureFolderExists): new
method that attempts to create a folder when it does not exists
and returns NO if that creation failed or YES in any other case.
(-createFolder:withFID:andKey:): rc was never initialized when in
success code.
(-messageKeysMatchingQualifier:andSortOrderings:)
(-folderKeysMatchingQualifier:andSortOrderings:)
(-permissionEntries): invoke "ensureFolderExists" prior to any
operation.
* OpenChange/MAPIStoreContext.m
(+createRootFolder:withFID:andName:forUser:withRole:): removed the
"andTDBIndexing:" argument.

View File

@ -39,6 +39,8 @@
SOGoMAPIFSMessage *versionsMessage;
}
- (BOOL) ensureFolderExists;
/* synchronisation & versioning */
- (BOOL) synchroniseCache;
- (NSNumber *) modseqFromMessageChangeNumber: (NSNumber *) changeNum;

View File

@ -87,6 +87,12 @@ static Class SOGoMailFolderK;
return self;
}
- (void) dealloc
{
[versionsMessage release];
[super dealloc];
}
- (void) setupVersionsMessage
{
ASSIGN (versionsMessage,
@ -94,13 +100,11 @@ static Class SOGoMailFolderK;
inContainer: propsFolder]);
}
- (void) dealloc
- (BOOL) ensureFolderExists
{
[versionsMessage release];
[super dealloc];
return [(SOGoMailFolder *) sogoObject exists] || [sogoObject create];
}
- (void) addProperties: (NSDictionary *) newProperties
{
NSString *newDisplayName;
@ -154,7 +158,10 @@ static Class SOGoMailFolderK;
newFolder = [SOGoMailFolderK objectWithName: nameInContainer
inContainer: sogoObject];
if ([newFolder create])
*newKeyP = nameInContainer;
{
*newKeyP = nameInContainer;
rc = MAPISTORE_SUCCESS;
}
else if ([newFolder exists])
rc = MAPISTORE_ERR_EXIST;
else
@ -248,23 +255,30 @@ static Class SOGoMailFolderK;
NSArray *uidKeys;
EOQualifier *fetchQualifier;
if (!sortOrderings)
sortOrderings = [NSArray arrayWithObject: @"ARRIVAL"];
if (qualifier)
if ([self ensureFolderExists])
{
fetchQualifier
= [[EOAndQualifier alloc] initWithQualifiers:
[self nonDeletedQualifier], qualifier,
nil];
[fetchQualifier autorelease];
if (!sortOrderings)
sortOrderings = [NSArray arrayWithObject: @"ARRIVAL"];
if (qualifier)
{
fetchQualifier
= [[EOAndQualifier alloc] initWithQualifiers:
[self nonDeletedQualifier], qualifier,
nil];
[fetchQualifier autorelease];
}
else
fetchQualifier = [self nonDeletedQualifier];
uidKeys = [[sogoObject fetchUIDsMatchingQualifier: fetchQualifier
sortOrdering: sortOrderings]
stringsWithFormat: @"%@.eml"];
}
else
fetchQualifier = [self nonDeletedQualifier];
uidKeys = nil;
uidKeys = [sogoObject fetchUIDsMatchingQualifier: fetchQualifier
sortOrdering: sortOrderings];
return [uidKeys stringsWithFormat: @"%@.eml"];
return uidKeys;
}
- (NSMutableString *) _imapFolderNameRepresentation: (NSString *) subfolderName
@ -325,15 +339,20 @@ static Class SOGoMailFolderK;
{
NSMutableArray *subfolderKeys;
if (qualifier)
[self errorWithFormat: @"qualifier is not used for folders"];
if (sortOrderings)
[self errorWithFormat: @"sort orderings are not used for folders"];
if ([self ensureFolderExists])
{
if (qualifier)
[self errorWithFormat: @"qualifier is not used for folders"];
if (sortOrderings)
[self errorWithFormat: @"sort orderings are not used for folders"];
subfolderKeys = [[sogoObject toManyRelationshipKeys] mutableCopy];
[subfolderKeys autorelease];
subfolderKeys = [[sogoObject toManyRelationshipKeys] mutableCopy];
[subfolderKeys autorelease];
[self _cleanupSubfolderKeys: subfolderKeys];
[self _cleanupSubfolderKeys: subfolderKeys];
}
else
subfolderKeys = nil;
return subfolderKeys;
}
@ -366,6 +385,18 @@ static Class SOGoMailFolderK;
return (SOGoFolder *) sogoObject;
}
- (NSArray *) permissionEntries
{
NSArray *permissionEntries;
if ([self ensureFolderExists])
permissionEntries = [super permissionEntries];
else
permissionEntries = nil;
return permissionEntries;
}
/* synchronisation */
/* Tree: