diff --git a/ChangeLog b/ChangeLog index 94b7a073a..8f455b2b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2012-02-14 Wolfgang Sourdeau + * 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. diff --git a/OpenChange/MAPIStoreMailFolder.h b/OpenChange/MAPIStoreMailFolder.h index 8a5a51ec2..84dceea27 100644 --- a/OpenChange/MAPIStoreMailFolder.h +++ b/OpenChange/MAPIStoreMailFolder.h @@ -39,6 +39,8 @@ SOGoMAPIFSMessage *versionsMessage; } +- (BOOL) ensureFolderExists; + /* synchronisation & versioning */ - (BOOL) synchroniseCache; - (NSNumber *) modseqFromMessageChangeNumber: (NSNumber *) changeNum; diff --git a/OpenChange/MAPIStoreMailFolder.m b/OpenChange/MAPIStoreMailFolder.m index cd5c40371..d781b41a0 100644 --- a/OpenChange/MAPIStoreMailFolder.m +++ b/OpenChange/MAPIStoreMailFolder.m @@ -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: