Monotone-Parent: be64ce923b1780a6ed810e7250748d84ad4425bb

Monotone-Revision: 7f9dd19e7f17c342c380ab2a0c551594be6d8762

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-02-02T01:45:17
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2012-02-02 01:45:17 +00:00
parent 28f7997539
commit 32ee60c025
7 changed files with 73 additions and 10 deletions

View File

@ -1,5 +1,15 @@
2012-02-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/SOGoMAPIFSMessage.m (-delete): returns the exception
rather than raising it.
* OpenChange/SOGoMAPIFSFolder.m (-delete): new method that removes
the directory from the filesystem.
* OpenChange/MAPIStoreGCSFolder.m (-deleteFolder): overriden method.
* OpenChange/MAPIStoreFolder.m (-deleteFolder): implemented method.
* SoObjects/SOGo/SOGoParentFolder.m (-removeSubFolder): new method
that removes a subfolder entry from the folder cache.

View File

@ -96,7 +96,7 @@
- (int) createFolder: (MAPIStoreFolder **) childFolderPtr
withRow: (struct SRow *) aRow
andFID: (uint64_t) fid;
- (int) deleteFolderWithFID: (uint64_t) fid;
- (int) deleteFolder;
- (int) getChildCount: (uint32_t *) rowCount
ofTableType: (enum mapistore_table_type) tableType;

View File

@ -384,11 +384,13 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return rc;
}
- (int) deleteFolderWithFID: (uint64_t) fid
- (int) deleteFolder
{
[self logWithFormat: @"UNIMPLEMENTED METHOD '%s' (%d)", __FUNCTION__, __LINE__];
[propsMessage delete];
[propsFolder delete];
[faiFolder delete];
return MAPISTORE_ERROR;
return MAPISTORE_SUCCESS;
}
- (int) getChildCount: (uint32_t *) rowCount

View File

@ -22,6 +22,7 @@
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSDictionary.h>
#import <Foundation/NSException.h>
#import <NGExtensions/NSObject+Logs.h>
#import <EOControl/EOQualifier.h>
#import <EOControl/EOFetchSpecification.h>
@ -29,6 +30,7 @@
#import <GDLContentStore/GCSFolder.h>
#import <SOGo/NSArray+Utilities.h>
#import <SOGo/SOGoGCSFolder.h>
#import <SOGo/SOGoParentFolder.h>
#import <SOGo/SOGoPermissions.h>
#import <SOGo/SOGoUser.h>
@ -44,6 +46,7 @@
#undef DEBUG
#include <mapistore/mapistore.h>
#include <mapistore/mapistore_errors.h>
@implementation MAPIStoreGCSFolder
@ -72,6 +75,33 @@
[super dealloc];
}
- (int) deleteFolder
{
int rc;
NSException *error;
NSString *name;
name = [self nameInContainer];
if ([name isEqualToString: @"personal"])
rc = MAPISTORE_ERR_DENIED;
else
{
[[sogoObject container] removeSubFolder: name];
error = [(SOGoGCSFolder *) sogoObject delete];
if (error)
rc = MAPISTORE_ERROR;
else
{
if (![versionsMessage delete])
rc = MAPISTORE_SUCCESS;
else
rc = MAPISTORE_ERROR;
}
}
return (rc == MAPISTORE_SUCCESS) ? [super deleteFolder] : rc;
}
- (void) addProperties: (NSDictionary *) newProperties
{
NSString *newDisplayName;

View File

@ -333,7 +333,7 @@ sogo_folder_create_folder(void *folder_object, TALLOC_CTX *mem_ctx,
\return MAPISTORE_SUCCESS on success, otherwise MAPISTORE_ERROR
*/
static enum mapistore_error
sogo_folder_delete_folder(void *folder_object, uint64_t fid)
sogo_folder_delete(void *folder_object)
{
struct MAPIStoreTallocWrapper *wrapper;
NSAutoreleasePool *pool;
@ -347,7 +347,7 @@ sogo_folder_delete_folder(void *folder_object, uint64_t fid)
wrapper = folder_object;
folder = wrapper->MAPIStoreSOGoObject;
pool = [NSAutoreleasePool new];
rc = [folder deleteFolderWithFID: fid];
rc = [folder deleteFolder];
[pool release];
}
else
@ -1244,7 +1244,7 @@ int mapistore_init_backend(void)
backend.context.get_root_folder = sogo_context_get_root_folder;
backend.folder.open_folder = sogo_folder_open_folder;
backend.folder.create_folder = sogo_folder_create_folder;
backend.folder.delete_folder = sogo_folder_delete_folder;
backend.folder.delete = sogo_folder_delete;
backend.folder.open_message = sogo_folder_open_message;
backend.folder.create_message = sogo_folder_create_message;
backend.folder.delete_message = sogo_folder_delete_message;

View File

@ -314,6 +314,23 @@ static NSString *privateDir = nil;
return [self _fileAttributeForKey: NSFileModificationDate];
}
- (NSException *) delete
{
NSFileManager *fm;
NSException *error;
fm = [NSFileManager defaultManager];
if (![fm removeFileAtPath: directory handler: NULL])
error = [NSException exceptionWithName: @"MAPIStoreIOException"
reason: @"could not delete folder"
userInfo: nil];
else
error = nil;
return error;
}
/* acl */
- (NSString *) defaultUserID
{

View File

@ -141,14 +141,18 @@
- (NSException *) delete
{
NSFileManager *fm;
NSException *error;
fm = [NSFileManager defaultManager];
if (![fm removeFileAtPath: [self completeFilename] handler: NULL])
[NSException raise: @"MAPIStoreIOException"
format: @"could not delete message"];
error = [NSException exceptionWithName: @"MAPIStoreIOException"
reason: @"could not delete message"
userInfo: nil];
else
error = nil;
return nil;
return error;
}
- (id) _fileAttributeForKey: (NSString *) key