summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/imapresource/imapresource.cpp45
-rw-r--r--examples/imapresource/imapserverproxy.cpp24
-rw-r--r--examples/imapresource/imapserverproxy.h3
-rw-r--r--tests/mailtest.cpp8
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
133KAsync::Job<void> ImapServerProxy::store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags) 133KAsync::Job<void> ImapServerProxy::store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags)
134{ 134{
135 return storeFlags(set, flags);
136}
137
138KAsync::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
147KAsync::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
157KAsync::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 });