From 672bbe1f10be056c1170bc227e16060edeff2481 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 3 Jun 2016 11:26:08 +0200 Subject: Implemented imap flag changes. --- examples/imapresource/imapresource.cpp | 45 ++++++++++++++++++++----------- examples/imapresource/imapserverproxy.cpp | 24 +++++++++++++++++ examples/imapresource/imapserverproxy.h | 3 +++ 3 files changed, 57 insertions(+), 15 deletions(-) (limited to 'examples/imapresource') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 2dfb2ea..02713b3 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -384,21 +384,36 @@ public: flags << Imap::Flags::Flagged; } - QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); - QDateTime internalDate = mail.getDate(); - auto rid = QSharedPointer::create(); - KIMAP::ImapSet set; - set.add(uid); - return login.then(imap->append(mailbox, content, flags, internalDate)) - .then([imap, mailbox, rid](qint64 uid) { - const auto remoteId = mailbox + "/" + QByteArray::number(uid); - Trace() << "Finished creating a modified mail: " << remoteId; - *rid = remoteId; - }) - .then(imap->remove(mailbox, set)) - .then([rid, imap]() { - return *rid; - }); + bool messageChanged = false; + if (messageChanged) { + QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); + QDateTime internalDate = mail.getDate(); + auto rid = QSharedPointer::create(); + KIMAP::ImapSet set; + set.add(uid); + return login.then(imap->append(mailbox, content, flags, internalDate)) + .then([imap, mailbox, rid](qint64 uid) { + const auto remoteId = mailbox + "/" + QByteArray::number(uid); + Trace() << "Finished creating a modified mail: " << remoteId; + *rid = remoteId; + }) + .then(imap->remove(mailbox, set)) + .then([rid, imap]() { + return *rid; + }); + } else { + KIMAP::ImapSet set; + set.add(uid); + return login.then(imap->select(mailbox)) + .then(imap->storeFlags(set, flags)) + .then([imap, mailbox](qint64 uid) { + const auto remoteId = mailbox + "/" + QByteArray::number(uid); + Trace() << "Finished modifying mail: " << remoteId; + }) + .then([oldRemoteId, imap]() { + return oldRemoteId; + }); + } } return KAsync::null(); } diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index 1414dbe..ddda2e9 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp @@ -132,11 +132,35 @@ KAsync::Job ImapServerProxy::append(const QString &mailbox, const QByteA KAsync::Job ImapServerProxy::store(const KIMAP::ImapSet &set, const QList &flags) { + return storeFlags(set, flags); +} + +KAsync::Job ImapServerProxy::storeFlags(const KIMAP::ImapSet &set, const QList &flags) auto store = new KIMAP::StoreJob(mSession); store->setUidBased(true); + store->setMode(KIMAP::StoreJob::SetFlags); store->setSequenceSet(set); store->setFlags(flags); + return runJob(store); +} + +KAsync::Job ImapServerProxy::addFlags(const KIMAP::ImapSet &set, const QList &flags) +{ + auto store = new KIMAP::StoreJob(mSession); + store->setUidBased(true); store->setMode(KIMAP::StoreJob::AppendFlags); + store->setSequenceSet(set); + store->setFlags(flags); + return runJob(store); +} + +KAsync::Job ImapServerProxy::removeFlags(const KIMAP::ImapSet &set, const QList &flags) +{ + auto store = new KIMAP::StoreJob(mSession); + store->setUidBased(true); + store->setMode(KIMAP::StoreJob::RemoveFlags); + store->setSequenceSet(set); + store->setFlags(flags); return runJob(store); } diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h index 3afeee5..05409c5 100644 --- a/examples/imapresource/imapserverproxy.h +++ b/examples/imapresource/imapserverproxy.h @@ -69,6 +69,9 @@ public: KAsync::Job select(const QString &mailbox); KAsync::Job append(const QString &mailbox, const QByteArray &content, const QList &flags = QList(), const QDateTime &internalDate = QDateTime()); KAsync::Job store(const KIMAP::ImapSet &set, const QList &flags); + KAsync::Job storeFlags(const KIMAP::ImapSet &set, const QList &flags); + KAsync::Job addFlags(const KIMAP::ImapSet &set, const QList &flags); + KAsync::Job removeFlags(const KIMAP::ImapSet &set, const QList &flags); KAsync::Job create(const QString &mailbox); KAsync::Job rename(const QString &mailbox, const QString &newMailbox); KAsync::Job remove(const QString &mailbox); -- cgit v1.2.3