From b13fe70bebeb5bb977cee5a6ee773aa7e9b57de5 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 9 Aug 2012 21:35:09 +0000 Subject: [PATCH] Monotone-Parent: 5a88c883713608f144b55bfcc8139174ad4ab129 Monotone-Revision: 9f415bbce0de3939851adeff8e3f25986b8630f7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-08-09T21:35:09 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 ++++ OpenChange/MAPIStoreMailFolder.m | 41 +++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b04463fdc..d7dde49dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-08-09 Wolfgang Sourdeau + * OpenChange/MAPIStoreMailFolder.m + (-moveFolderWithFID:fromFolder:withNewName:): first implementation + for IMAP folders. + * OpenChange/MAPIStoreSOGo.m (sogo_folder_move_folder) (sogo_folder_copy_folder): new backend methods. (sogo_folder_move_folder): do not instantiate an NSString from a diff --git a/OpenChange/MAPIStoreMailFolder.m b/OpenChange/MAPIStoreMailFolder.m index 8fffd8d9d..ffac80999 100644 --- a/OpenChange/MAPIStoreMailFolder.m +++ b/OpenChange/MAPIStoreMailFolder.m @@ -60,7 +60,7 @@ #import "MAPIStoreMailFolder.h" -static Class SOGoMailFolderK, MAPIStoreOutboxFolderK; +static Class SOGoMailFolderK, MAPIStoreMailFolderK, MAPIStoreOutboxFolderK; #undef DEBUG #include @@ -73,6 +73,7 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK; + (void) initialize { SOGoMailFolderK = [SOGoMailFolder class]; + MAPIStoreMailFolderK = [MAPIStoreMailFolder class]; MAPIStoreOutboxFolderK = [MAPIStoreOutboxFolder class]; [MAPIStoreAppointmentWrapper class]; } @@ -1002,6 +1003,44 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP) return MAPISTORE_SUCCESS; } +- (enum mapistore_error) moveFolderWithFID: (uint64_t) fid + fromFolder: (MAPIStoreFolder *) sourceFolder + withNewName: (NSString *) newFolderName +{ + enum mapistore_error rc; + MAPIStoreMailFolder *moveFolder; + NSURL *folderURL, *newFolderURL; + SOGoMailFolder *sogoMoveFolder; + NSException *error; + + if ([sourceFolder isKindOfClass: MAPIStoreMailFolderK]) + { + rc = [sourceFolder openFolder: &moveFolder withFID: fid]; + if (rc == MAPISTORE_SUCCESS) + { + sogoMoveFolder = [moveFolder sogoObject]; + folderURL = [sogoMoveFolder imap4URL]; + if (!newFolderName) + newFolderName = [sogoMoveFolder nameInContainer]; + newFolderURL = [NSURL URLWithString: newFolderName + relativeToURL: [sogoObject imap4URL]]; + error = [[sogoMoveFolder imap4Connection] + moveMailboxAtURL: folderURL + toURL: newFolderURL]; + if (error) + rc = MAPISTORE_ERR_DENIED; + else + rc = MAPISTORE_SUCCESS; + } + else + rc = MAPISTORE_ERR_NOT_FOUND; + } + else + rc = MAPISTORE_ERR_DENIED; + + return rc; +} + - (MAPIStoreMessage *) createMessage { SOGoMAPIObject *childObject;