From 3fa1766af3fa85067d4b2d48c8410e6c201ae323 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 12 Jun 2016 02:11:02 +0200 Subject: Moving of mails between folders --- examples/imapresource/imapresource.cpp | 9 ++++++--- examples/imapresource/imapserverproxy.cpp | 16 ++++++++++++++++ examples/imapresource/imapserverproxy.h | 2 ++ 3 files changed, 24 insertions(+), 3 deletions(-) (limited to 'examples') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index aca1c01..8cbb9fa 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -491,8 +491,11 @@ public: flags << Imap::Flags::Flagged; } - const bool messageChanged = changedProperties.contains(Sink::ApplicationDomain::Mail::MimeMessage::name); - if (messageChanged) { + const bool messageMoved = changedProperties.contains(ApplicationDomain::Mail::Folder::name); + const bool messageChanged = changedProperties.contains(ApplicationDomain::Mail::MimeMessage::name); + if (messageChanged || messageMoved) { + const auto folderId = folderIdFromMailRid(oldRemoteId); + const QString oldMailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, folderId); QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); QDateTime internalDate = mail.getDate(); auto rid = QSharedPointer::create(); @@ -504,7 +507,7 @@ public: Trace() << "Finished creating a modified mail: " << remoteId; *rid = remoteId; }) - .then(imap->remove(mailbox, set)) + .then(imap->remove(oldMailbox, set)) .then([rid, imap]() { return *rid; }); diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index db68a53..49711a9 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -219,6 +220,15 @@ KAsync::Job ImapServerProxy::expunge(const KIMAP::ImapSet &set) return runJob(job); } +KAsync::Job ImapServerProxy::copy(const KIMAP::ImapSet &set, const QString &newMailbox) +{ + auto copy = new KIMAP::CopyJob(mSession); + copy->setSequenceSet(set); + copy->setUidBased(true); + copy->setMailBox(newMailbox); + return runJob(copy); +} + KAsync::Job ImapServerProxy::fetch(const KIMAP::ImapSet &set, KIMAP::FetchJob::FetchScope scope, FetchCallback callback) { auto fetch = new KIMAP::FetchJob(mSession); @@ -304,6 +314,12 @@ KAsync::Job ImapServerProxy::remove(const QString &mailbox, const QByteArr return remove(mailbox, set); } + +KAsync::Job ImapServerProxy::move(const QString &mailbox, const KIMAP::ImapSet &set, const QString &newMailbox) +{ + return select(mailbox).then(copy(set, newMailbox)).then(store(set, QByteArrayList() << Flags::Deleted)).then(expunge(set)); +} + KAsync::Job ImapServerProxy::createSubfolder(const QString &parentMailbox, const QString &folderName) { auto folder = QSharedPointer::create(); diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h index 67ff000..95ed704 100644 --- a/examples/imapresource/imapserverproxy.h +++ b/examples/imapresource/imapserverproxy.h @@ -93,6 +93,7 @@ public: KAsync::Job remove(const QString &mailbox); KAsync::Job expunge(); KAsync::Job expunge(const KIMAP::ImapSet &set); + KAsync::Job copy(const KIMAP::ImapSet &set, const QString &newMailbox); typedef std::function &, @@ -109,6 +110,7 @@ public: KAsync::Job> fetchHeaders(const QString &mailbox); KAsync::Job remove(const QString &mailbox, const KIMAP::ImapSet &set); KAsync::Job remove(const QString &mailbox, const QByteArray &imapSet); + KAsync::Job move(const QString &mailbox, const KIMAP::ImapSet &set, const QString &newMailbox); KAsync::Job createSubfolder(const QString &parentMailbox, const QString &folderName); KAsync::Job renameSubfolder(const QString &mailbox, const QString &newName); -- cgit v1.2.3