diff options
-rw-r--r-- | examples/imapresource/imapresource.cpp | 45 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.cpp | 24 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.h | 3 | ||||
-rw-r--r-- | tests/mailtest.cpp | 8 |
4 files changed, 61 insertions, 19 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); |
diff --git a/tests/mailtest.cpp b/tests/mailtest.cpp index 912bb1c..9411f91 100644 --- a/tests/mailtest.cpp +++ b/tests/mailtest.cpp | |||
@@ -231,7 +231,7 @@ void MailTest::testMarkMailAsRead() | |||
231 | auto mail = Mail::create(mResourceInstanceIdentifier); | 231 | auto mail = Mail::create(mResourceInstanceIdentifier); |
232 | mail.setMimeMessage(message->encodedContent()); | 232 | mail.setMimeMessage(message->encodedContent()); |
233 | mail.setFolder(folder); | 233 | mail.setFolder(folder); |
234 | mail.setUnread(false); | 234 | mail.setUnread(true); |
235 | VERIFYEXEC(Store::create(mail)); | 235 | VERIFYEXEC(Store::create(mail)); |
236 | VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); | 236 | VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); |
237 | 237 | ||
@@ -241,10 +241,10 @@ void MailTest::testMarkMailAsRead() | |||
241 | .then<void, KAsync::Job<void>, QList<Mail::Ptr>>([this](const QList<Mail::Ptr> &mails) { | 241 | .then<void, KAsync::Job<void>, QList<Mail::Ptr>>([this](const QList<Mail::Ptr> &mails) { |
242 | ASYNCCOMPARE(mails.size(), 1); | 242 | ASYNCCOMPARE(mails.size(), 1); |
243 | auto mail = mails.first(); | 243 | auto mail = mails.first(); |
244 | mail->setUnread(true); | 244 | mail->setUnread(false); |
245 | return Store::modify(*mail) | 245 | return Store::modify(*mail) |
246 | .then<void>(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)) // The change needs to be replayed already | 246 | .then<void>(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)) // The change needs to be replayed already |
247 | .then(ResourceControl::inspect<Mail>(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Unread::name, true))) | 247 | .then(ResourceControl::inspect<Mail>(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Unread::name, false))) |
248 | .then(ResourceControl::inspect<Mail>(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Subject::name, mail->getSubject()))); | 248 | .then(ResourceControl::inspect<Mail>(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Subject::name, mail->getSubject()))); |
249 | }); | 249 | }); |
250 | VERIFYEXEC(job); | 250 | VERIFYEXEC(job); |
@@ -259,7 +259,7 @@ void MailTest::testMarkMailAsRead() | |||
259 | ASYNCCOMPARE(mails.size(), 1); | 259 | ASYNCCOMPARE(mails.size(), 1); |
260 | auto mail = mails.first(); | 260 | auto mail = mails.first(); |
261 | ASYNCVERIFY(!mail->getSubject().isEmpty()); | 261 | ASYNCVERIFY(!mail->getSubject().isEmpty()); |
262 | ASYNCCOMPARE(mail->getUnread(), true); | 262 | ASYNCCOMPARE(mail->getUnread(), false); |
263 | ASYNCVERIFY(QFileInfo(mail->getMimeMessagePath()).exists()); | 263 | ASYNCVERIFY(QFileInfo(mail->getMimeMessagePath()).exists()); |
264 | return KAsync::null<void>(); | 264 | return KAsync::null<void>(); |
265 | }); | 265 | }); |