diff --git a/ChangeLog b/ChangeLog index c7ade139a..f10711b10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-08-09 Wolfgang Sourdeau + + * OpenChange/MAPIStoreSOGo.m (sogo_folder_move_folder) + (sogo_folder_copy_folder): new backend methods. + 2012-08-08 Wolfgang Sourdeau * OpenChange/MAPIStoreCalendarMessage.m (-save): generate a diff --git a/OpenChange/MAPIStoreFolder.h b/OpenChange/MAPIStoreFolder.h index b29a93d3d..3e65423ee 100644 --- a/OpenChange/MAPIStoreFolder.h +++ b/OpenChange/MAPIStoreFolder.h @@ -123,6 +123,14 @@ andChangeKeys: (struct Binary_r **) targetChangeKeys wantCopy: (uint8_t) want_copy; +- (enum mapistore_error) moveFolderWithFID: (uint64_t) fid + fromFolder: (MAPIStoreFolder *) sourceFolder + withNewName: (NSString *) newFolderName; +- (enum mapistore_error) copyFolderWithFID: (uint64_t) fid + fromFolder: (MAPIStoreFolder *) sourceFolder + recursive: (BOOL) resursive + withNewName: (NSString *) newFolderName; + - (int) getDeletedFMIDs: (struct I8Array_r **) fmidsPtr andCN: (uint64_t *) cnPtr fromChangeNumber: (uint64_t) changeNum diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index f4128695d..4beafc5b3 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -795,6 +795,21 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } +- (enum mapistore_error) moveFolderWithFID: (uint64_t) fid + fromFolder: (MAPIStoreFolder *) sourceFolder + withNewName: (NSString *) newFolderName +{ + return MAPISTORE_ERR_DENIED; +} + +- (enum mapistore_error) copyFolderWithFID: (uint64_t) fid + fromFolder: (MAPIStoreFolder *) sourceFolder + recursive: (BOOL) resursive + withNewName: (NSString *) newFolderName +{ + return MAPISTORE_ERR_DENIED; +} + - (SOGoFolder *) aclFolder { [self subclassResponsibility: _cmd]; diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 2dd78074b..09dfa596a 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -608,6 +608,86 @@ sogo_folder_move_copy_messages(void *folder_object, return rc; } +static enum mapistore_error +sogo_folder_move_folder(void *folder_object, void *source_folder_object, + uint64_t fid, const char *new_folder_name) +{ + MAPIStoreFolder *sourceFolder, *targetFolder; + NSAutoreleasePool *pool; + NSString *newFolderName; + struct MAPIStoreTallocWrapper *wrapper; + int rc; + + DEBUG (5, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); + + if (folder_object) + { + wrapper = folder_object; + targetFolder = wrapper->instance; + + wrapper = source_folder_object; + sourceFolder = wrapper->instance; + + GSRegisterCurrentThread (); + pool = [NSAutoreleasePool new]; + + newFolderName = [NSString stringWithUTF8String: new_folder_name]; + + rc = [targetFolder moveFolderWithFID: fid + fromFolder: sourceFolder + withNewName: newFolderName]; + [pool release]; + GSUnregisterCurrentThread (); + } + else + { + rc = sogo_backend_unexpected_error(); + } + + return rc; +} + +static enum mapistore_error +sogo_folder_copy_folder(void *folder_object, void *source_folder_object, + uint64_t fid, bool recursive, + const char *new_folder_name) +{ + MAPIStoreFolder *sourceFolder, *targetFolder; + NSAutoreleasePool *pool; + NSString *newFolderName; + struct MAPIStoreTallocWrapper *wrapper; + int rc; + + DEBUG (5, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); + + if (folder_object) + { + wrapper = folder_object; + targetFolder = wrapper->instance; + + wrapper = source_folder_object; + sourceFolder = wrapper->instance; + + GSRegisterCurrentThread (); + pool = [NSAutoreleasePool new]; + + newFolderName = [NSString stringWithUTF8String: new_folder_name]; + + rc = [targetFolder copyFolderWithFID: fid + fromFolder: sourceFolder + recursive: recursive + withNewName: newFolderName]; + [pool release]; + GSUnregisterCurrentThread (); + } + else + { + rc = sogo_backend_unexpected_error(); + } + + return rc; +} + static enum mapistore_error sogo_folder_get_deleted_fmids(void *folder_object, TALLOC_CTX *mem_ctx, enum mapistore_table_type table_type, uint64_t change_num, @@ -1414,6 +1494,8 @@ int mapistore_init_backend(void) backend.folder.create_message = sogo_folder_create_message; backend.folder.delete_message = sogo_folder_delete_message; backend.folder.move_copy_messages = sogo_folder_move_copy_messages; + backend.folder.move_folder = sogo_folder_move_folder; + backend.folder.copy_folder = sogo_folder_copy_folder; backend.folder.get_deleted_fmids = sogo_folder_get_deleted_fmids; backend.folder.get_child_count = sogo_folder_get_child_count; backend.folder.open_table = sogo_folder_open_table;