summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-06-03 11:26:08 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-06-03 11:26:08 +0200
commit672bbe1f10be056c1170bc227e16060edeff2481 (patch)
tree81cae3afea0797be17ef9fbd71213e1fcb31609d /examples
parent709f24f25b6c22b1eafc323855ea166034110e0b (diff)
downloadsink-672bbe1f10be056c1170bc227e16060edeff2481.tar.gz
sink-672bbe1f10be056c1170bc227e16060edeff2481.zip
Implemented imap flag changes.
Diffstat (limited to 'examples')
-rw-r--r--examples/imapresource/imapresource.cpp45
-rw-r--r--examples/imapresource/imapserverproxy.cpp24
-rw-r--r--examples/imapresource/imapserverproxy.h3
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
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);