aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async
diff options
context:
space:
mode:
authorGravatar Nikolay Morev <n.morev@corp.mail.ru>2016-02-02 19:55:20 +0300
committerGravatar Nikolay Morev <n.morev@corp.mail.ru>2016-02-05 11:17:26 +0300
commit71c5c1ebb30cd54f68e8be11e8dede5d8efb4dec (patch)
treed9db840da5ec83180ffb38c82385312ea13e9c57 /src/async
parent637e0419f34a9d1cac526067e841773c29e9967d (diff)
Add IMAP MOVE command support
Diffstat (limited to 'src/async')
-rwxr-xr-xsrc/async/imap/MCAsyncIMAP.h1
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.cpp12
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.h2
-rw-r--r--src/async/imap/MCIMAPMoveMessagesOperation.cpp61
-rw-r--r--src/async/imap/MCIMAPMoveMessagesOperation.h46
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