diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-03 11:26:08 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-03 11:26:08 +0200 |
commit | 672bbe1f10be056c1170bc227e16060edeff2481 (patch) | |
tree | 81cae3afea0797be17ef9fbd71213e1fcb31609d /examples/imapresource | |
parent | 709f24f25b6c22b1eafc323855ea166034110e0b (diff) | |
download | sink-672bbe1f10be056c1170bc227e16060edeff2481.tar.gz sink-672bbe1f10be056c1170bc227e16060edeff2481.zip |
Implemented imap flag changes.
Diffstat (limited to 'examples/imapresource')
-rw-r--r-- | examples/imapresource/imapresource.cpp | 45 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.cpp | 24 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.h | 3 |
3 files changed, 57 insertions, 15 deletions
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: | |||
384 | flags << Imap::Flags::Flagged; | 384 | flags << Imap::Flags::Flagged; |
385 | } | 385 | } |
386 | 386 | ||
387 | QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); | 387 | bool messageChanged = false; |
388 | QDateTime internalDate = mail.getDate(); | 388 | if (messageChanged) { |
389 | auto rid = QSharedPointer<QByteArray>::create(); | 389 | QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); |
390 | KIMAP::ImapSet set; | 390 | QDateTime internalDate = mail.getDate(); |
391 | set.add(uid); | 391 | auto rid = QSharedPointer<QByteArray>::create(); |
392 | return login.then(imap->append(mailbox, content, flags, internalDate)) | 392 | KIMAP::ImapSet set; |
393 | .then<void, qint64>([imap, mailbox, rid](qint64 uid) { | 393 | set.add(uid); |
394 | const auto remoteId = mailbox + "/" + QByteArray::number(uid); | 394 | return login.then(imap->append(mailbox, content, flags, internalDate)) |
395 | Trace() << "Finished creating a modified mail: " << remoteId; | 395 | .then<void, qint64>([imap, mailbox, rid](qint64 uid) { |
396 | *rid = remoteId; | 396 | const auto remoteId = mailbox + "/" + QByteArray::number(uid); |
397 | }) | 397 | Trace() << "Finished creating a modified mail: " << remoteId; |
398 | .then(imap->remove(mailbox, set)) | 398 | *rid = remoteId; |
399 | .then<QByteArray>([rid, imap]() { | 399 | }) |
400 | return *rid; | 400 | .then(imap->remove(mailbox, set)) |
401 | }); | 401 | .then<QByteArray>([rid, imap]() { |
402 | return *rid; | ||
403 | }); | ||
404 | } else { | ||
405 | KIMAP::ImapSet set; | ||
406 | set.add(uid); | ||
407 | return login.then(imap->select(mailbox)) | ||
408 | .then(imap->storeFlags(set, flags)) | ||
409 | .then<void, qint64>([imap, mailbox](qint64 uid) { | ||
410 | const auto remoteId = mailbox + "/" + QByteArray::number(uid); | ||
411 | Trace() << "Finished modifying mail: " << remoteId; | ||
412 | }) | ||
413 | .then<QByteArray>([oldRemoteId, imap]() { | ||
414 | return oldRemoteId; | ||
415 | }); | ||
416 | } | ||
402 | } | 417 | } |
403 | return KAsync::null<QByteArray>(); | 418 | return KAsync::null<QByteArray>(); |
404 | } | 419 | } |
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<qint64> ImapServerProxy::append(const QString &mailbox, const QByteA | |||
132 | 132 | ||
133 | KAsync::Job<void> ImapServerProxy::store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags) | 133 | KAsync::Job<void> ImapServerProxy::store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags) |
134 | { | 134 | { |
135 | return storeFlags(set, flags); | ||
136 | } | ||
137 | |||
138 | KAsync::Job<void> ImapServerProxy::storeFlags(const KIMAP::ImapSet &set, const QList<QByteArray> &flags) | ||
135 | auto store = new KIMAP::StoreJob(mSession); | 139 | auto store = new KIMAP::StoreJob(mSession); |
136 | store->setUidBased(true); | 140 | store->setUidBased(true); |
141 | store->setMode(KIMAP::StoreJob::SetFlags); | ||
137 | store->setSequenceSet(set); | 142 | store->setSequenceSet(set); |
138 | store->setFlags(flags); | 143 | store->setFlags(flags); |
144 | return runJob(store); | ||
145 | } | ||
146 | |||
147 | KAsync::Job<void> ImapServerProxy::addFlags(const KIMAP::ImapSet &set, const QList<QByteArray> &flags) | ||
148 | { | ||
149 | auto store = new KIMAP::StoreJob(mSession); | ||
150 | store->setUidBased(true); | ||
139 | store->setMode(KIMAP::StoreJob::AppendFlags); | 151 | store->setMode(KIMAP::StoreJob::AppendFlags); |
152 | store->setSequenceSet(set); | ||
153 | store->setFlags(flags); | ||
154 | return runJob(store); | ||
155 | } | ||
156 | |||
157 | KAsync::Job<void> ImapServerProxy::removeFlags(const KIMAP::ImapSet &set, const QList<QByteArray> &flags) | ||
158 | { | ||
159 | auto store = new KIMAP::StoreJob(mSession); | ||
160 | store->setUidBased(true); | ||
161 | store->setMode(KIMAP::StoreJob::RemoveFlags); | ||
162 | store->setSequenceSet(set); | ||
163 | store->setFlags(flags); | ||
140 | return runJob(store); | 164 | return runJob(store); |
141 | } | 165 | } |
142 | 166 | ||
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: | |||
69 | KAsync::Job<void> select(const QString &mailbox); | 69 | KAsync::Job<void> select(const QString &mailbox); |
70 | KAsync::Job<qint64> append(const QString &mailbox, const QByteArray &content, const QList<QByteArray> &flags = QList<QByteArray>(), const QDateTime &internalDate = QDateTime()); | 70 | KAsync::Job<qint64> append(const QString &mailbox, const QByteArray &content, const QList<QByteArray> &flags = QList<QByteArray>(), const QDateTime &internalDate = QDateTime()); |
71 | KAsync::Job<void> store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags); | 71 | KAsync::Job<void> store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags); |
72 | KAsync::Job<void> storeFlags(const KIMAP::ImapSet &set, const QList<QByteArray> &flags); | ||
73 | KAsync::Job<void> addFlags(const KIMAP::ImapSet &set, const QList<QByteArray> &flags); | ||
74 | KAsync::Job<void> removeFlags(const KIMAP::ImapSet &set, const QList<QByteArray> &flags); | ||
72 | KAsync::Job<void> create(const QString &mailbox); | 75 | KAsync::Job<void> create(const QString &mailbox); |
73 | KAsync::Job<void> rename(const QString &mailbox, const QString &newMailbox); | 76 | KAsync::Job<void> rename(const QString &mailbox, const QString &newMailbox); |
74 | KAsync::Job<void> remove(const QString &mailbox); | 77 | KAsync::Job<void> remove(const QString &mailbox); |