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;