diff options
author | Nikolay Morev <n.morev@corp.mail.ru> | 2016-02-02 19:55:20 +0300 |
---|---|---|
committer | Nikolay Morev <n.morev@corp.mail.ru> | 2016-02-05 11:17:26 +0300 |
commit | 71c5c1ebb30cd54f68e8be11e8dede5d8efb4dec (patch) | |
tree | d9db840da5ec83180ffb38c82385312ea13e9c57 /src/async | |
parent | 637e0419f34a9d1cac526067e841773c29e9967d (diff) |
Add IMAP MOVE command support
Diffstat (limited to 'src/async')
-rwxr-xr-x | src/async/imap/MCAsyncIMAP.h | 1 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncSession.cpp | 12 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncSession.h | 2 | ||||
-rw-r--r-- | src/async/imap/MCIMAPMoveMessagesOperation.cpp | 61 | ||||
-rw-r--r-- | src/async/imap/MCIMAPMoveMessagesOperation.h | 46 |
5 files changed, 122 insertions, 0 deletions
diff --git a/src/async/imap/MCAsyncIMAP.h b/src/async/imap/MCAsyncIMAP.h index aa6d6b68..1fb51de0 100755 --- a/src/async/imap/MCAsyncIMAP.h +++ b/src/async/imap/MCAsyncIMAP.h @@ -15,6 +15,7 @@ #include <MailCore/MCIMAPFetchFoldersOperation.h> #include <MailCore/MCIMAPAppendMessageOperation.h> #include <MailCore/MCIMAPCopyMessagesOperation.h> +#include <MailCore/MCIMAPMoveMessagesOperation.h> #include <MailCore/MCIMAPFetchMessagesOperation.h> #include <MailCore/MCIMAPFetchContentOperation.h> #include <MailCore/MCIMAPFetchParsedContentOperation.h> diff --git a/src/async/imap/MCIMAPAsyncSession.cpp b/src/async/imap/MCIMAPAsyncSession.cpp index a8cccea5..7f00d105 100755 --- a/src/async/imap/MCIMAPAsyncSession.cpp +++ b/src/async/imap/MCIMAPAsyncSession.cpp @@ -26,6 +26,7 @@ #include "MCIMAPExpungeOperation.h" #include "MCIMAPAppendMessageOperation.h" #include "MCIMAPCopyMessagesOperation.h" +#include "MCIMAPMoveMessagesOperation.h" #include "MCIMAPFetchMessagesOperation.h" #include "MCIMAPFetchContentOperation.h" #include "MCIMAPFetchParsedContentOperation.h" @@ -453,6 +454,17 @@ IMAPCopyMessagesOperation * IMAPAsyncSession::copyMessagesOperation(String * fol return op; } +IMAPMoveMessagesOperation * IMAPAsyncSession::moveMessagesOperation(String * folder, IndexSet * uids, String * destFolder) +{ + IMAPMoveMessagesOperation * op = new IMAPMoveMessagesOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUids(uids); + op->setDestFolder(destFolder); + op->autorelease(); + return op; +} + IMAPOperation * IMAPAsyncSession::expungeOperation(String * folder) { IMAPExpungeOperation * op = new IMAPExpungeOperation(); diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h index 62577a6e..bbffacbd 100755 --- a/src/async/imap/MCIMAPAsyncSession.h +++ b/src/async/imap/MCIMAPAsyncSession.h @@ -21,6 +21,7 @@ namespace mailcore { class IMAPFetchFoldersOperation; class IMAPAppendMessageOperation; class IMAPCopyMessagesOperation; + class IMAPMoveMessagesOperation; class IMAPFetchMessagesOperation; class IMAPFetchContentOperation; class IMAPFetchParsedContentOperation; @@ -121,6 +122,7 @@ namespace mailcore { virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags = NULL); virtual IMAPCopyMessagesOperation * copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder); + virtual IMAPMoveMessagesOperation * moveMessagesOperation(String * folder, IndexSet * uids, String * destFolder); virtual IMAPOperation * expungeOperation(String * folder); diff --git a/src/async/imap/MCIMAPMoveMessagesOperation.cpp b/src/async/imap/MCIMAPMoveMessagesOperation.cpp new file mode 100644 index 00000000..cc8de937 --- /dev/null +++ b/src/async/imap/MCIMAPMoveMessagesOperation.cpp @@ -0,0 +1,61 @@ +// +// IMAPMoveMessagesOperation.cpp +// mailcore2 +// +// Created by Nikolay Morev on 02/02/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#include "MCIMAPMoveMessagesOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPMoveMessagesOperation::IMAPMoveMessagesOperation() +{ + mUids = NULL; + mDestFolder = NULL; + mUidMapping = NULL; +} + +IMAPMoveMessagesOperation::~IMAPMoveMessagesOperation() +{ + MC_SAFE_RELEASE(mUidMapping); + MC_SAFE_RELEASE(mUids); + MC_SAFE_RELEASE(mDestFolder); +} + +void IMAPMoveMessagesOperation::setUids(IndexSet * uids) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mUids, uids); +} + +IndexSet * IMAPMoveMessagesOperation::uids() +{ + return mUids; +} + +HashMap * IMAPMoveMessagesOperation::uidMapping() +{ + return mUidMapping; +} + +void IMAPMoveMessagesOperation::setDestFolder(String * destFolder) +{ + MC_SAFE_REPLACE_COPY(String, mDestFolder, destFolder); +} + +String * IMAPMoveMessagesOperation::destFolder() +{ + return mDestFolder; +} + +void IMAPMoveMessagesOperation::main() +{ + ErrorCode error; + session()->session()->moveMessages(folder(), mUids, mDestFolder, &mUidMapping, &error); + MC_SAFE_RETAIN(mUidMapping); + setError(error); +} diff --git a/src/async/imap/MCIMAPMoveMessagesOperation.h b/src/async/imap/MCIMAPMoveMessagesOperation.h new file mode 100644 index 00000000..1c4342f5 --- /dev/null +++ b/src/async/imap/MCIMAPMoveMessagesOperation.h @@ -0,0 +1,46 @@ +// +// IMAPMoveMessagesOperation.hpp +// mailcore2 +// +// Created by Nikolay Morev on 02/02/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPMOVEMESSAGESOPERATION_H + +#define MAILCORE_MCIMAPMOVEMESSAGESOPERATION_H + +#include <MailCore/MCIMAPOperation.h> + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPMoveMessagesOperation : public IMAPOperation { + public: + IMAPMoveMessagesOperation(); + virtual ~IMAPMoveMessagesOperation(); + + virtual void setDestFolder(String * destFolder); + virtual String * destFolder(); + + virtual void setUids(IndexSet * uids); + virtual IndexSet * uids(); + + // Result. + virtual HashMap * uidMapping(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mUids; + String * mDestFolder; + HashMap * mUidMapping; + }; + +} + +#endif + +#endif |