summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-06-02 13:35:40 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-06-02 13:35:40 +0200
commit855a878bcc124f8949586b3656dcc6e545e18dc0 (patch)
tree6497f1710ba3db8953d204032e5e8c14a239ad33 /examples
parent64a1b21a7b11d640f0ebd37184aeb14a4d9e12db (diff)
downloadsink-855a878bcc124f8949586b3656dcc6e545e18dc0.tar.gz
sink-855a878bcc124f8949586b3656dcc6e545e18dc0.zip
Always return jobs, not futures.
Otherwise the calls are not composable.
Diffstat (limited to 'examples')
-rw-r--r--examples/imapresource/imapresource.cpp5
-rw-r--r--examples/imapresource/imapserverproxy.cpp19
-rw-r--r--examples/imapresource/imapserverproxy.h5
-rw-r--r--examples/imapresource/tests/imapserverproxytest.cpp9
4 files changed, 21 insertions, 17 deletions
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp
index 5e5aae6..2bb28e7 100644
--- a/examples/imapresource/imapresource.cpp
+++ b/examples/imapresource/imapresource.cpp
@@ -54,6 +54,7 @@
54#define DEBUG_AREA "resource.imap" 54#define DEBUG_AREA "resource.imap"
55 55
56using namespace Imap; 56using namespace Imap;
57using namespace Sink;
57 58
58class MailPropertyExtractor : public Sink::Preprocessor 59class MailPropertyExtractor : public Sink::Preprocessor
59{ 60{
@@ -273,7 +274,7 @@ public:
273 commitSync(); 274 commitSync();
274 folderList << folders; 275 folderList << folders;
275 276
276 }); 277 }).exec();
277 folderFuture.waitForFinished(); 278 folderFuture.waitForFinished();
278 if (folderFuture.errorCode()) { 279 if (folderFuture.errorCode()) {
279 Warning() << "Folder sync failed."; 280 Warning() << "Folder sync failed.";
@@ -293,7 +294,7 @@ public:
293 synchronizeMails(folder.normalizedPath(), messages); 294 synchronizeMails(folder.normalizedPath(), messages);
294 commit(); 295 commit();
295 commitSync(); 296 commitSync();
296 }); 297 }).exec();
297 messagesFuture.waitForFinished(); 298 messagesFuture.waitForFinished();
298 if (messagesFuture.errorCode()) { 299 if (messagesFuture.errorCode()) {
299 future.setError(1, "Folder sync failed: " + folder.normalizedPath()); 300 future.setError(1, "Folder sync failed: " + folder.normalizedPath());
diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp
index 58d2772..18b8dcf 100644
--- a/examples/imapresource/imapserverproxy.cpp
+++ b/examples/imapresource/imapserverproxy.cpp
@@ -24,6 +24,7 @@
24#include <KIMAP/KIMAP/SelectJob> 24#include <KIMAP/KIMAP/SelectJob>
25#include <KIMAP/KIMAP/AppendJob> 25#include <KIMAP/KIMAP/AppendJob>
26#include <KIMAP/KIMAP/CreateJob> 26#include <KIMAP/KIMAP/CreateJob>
27#include <KIMAP/KIMAP/RenameJob>
27#include <KIMAP/KIMAP/DeleteJob> 28#include <KIMAP/KIMAP/DeleteJob>
28#include <KIMAP/KIMAP/StoreJob> 29#include <KIMAP/KIMAP/StoreJob>
29#include <KIMAP/KIMAP/ExpungeJob> 30#include <KIMAP/KIMAP/ExpungeJob>
@@ -113,6 +114,14 @@ KAsync::Job<void> ImapServerProxy::create(const QString &mailbox)
113 return runJob(create); 114 return runJob(create);
114} 115}
115 116
117KAsync::Job<void> ImapServerProxy::rename(const QString &mailbox, const QString &newMailbox)
118{
119 auto rename = new KIMAP::RenameJob(mSession);
120 rename->setSourceMailBox(mailbox);
121 rename->setDestinationMailBox(newMailbox);
122 return runJob(rename);
123}
124
116KAsync::Job<void> ImapServerProxy::remove(const QString &mailbox) 125KAsync::Job<void> ImapServerProxy::remove(const QString &mailbox)
117{ 126{
118 auto job = new KIMAP::DeleteJob(mSession); 127 auto job = new KIMAP::DeleteJob(mSession);
@@ -216,10 +225,10 @@ KAsync::Job<void> ImapServerProxy::remove(const QString &mailbox, const QByteArr
216 return select(mailbox).then<void>(store(set, QByteArrayList() << Flags::Deleted)).then<void>(expunge()); 225 return select(mailbox).then<void>(store(set, QByteArrayList() << Flags::Deleted)).then<void>(expunge());
217} 226}
218 227
219KAsync::Future<void> ImapServerProxy::fetchFolders(std::function<void(const QVector<Folder> &)> callback) 228KAsync::Job<void> ImapServerProxy::fetchFolders(std::function<void(const QVector<Folder> &)> callback)
220{ 229{
221 Trace() << "Fetching folders"; 230 Trace() << "Fetching folders";
222 auto job = list(KIMAP::ListJob::IncludeUnsubscribed, [callback](const QList<KIMAP::MailBoxDescriptor> &mailboxes, const QList<QList<QByteArray> > &flags){ 231 return list(KIMAP::ListJob::IncludeUnsubscribed, [callback](const QList<KIMAP::MailBoxDescriptor> &mailboxes, const QList<QList<QByteArray> > &flags){
223 QVector<Folder> list; 232 QVector<Folder> list;
224 for (const auto &mailbox : mailboxes) { 233 for (const auto &mailbox : mailboxes) {
225 Trace() << "Found mailbox: " << mailbox.name; 234 Trace() << "Found mailbox: " << mailbox.name;
@@ -227,13 +236,12 @@ KAsync::Future<void> ImapServerProxy::fetchFolders(std::function<void(const QVec
227 } 236 }
228 callback(list); 237 callback(list);
229 }); 238 });
230 return job.exec();
231} 239}
232 240
233KAsync::Future<void> ImapServerProxy::fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback) 241KAsync::Job<void> ImapServerProxy::fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback)
234{ 242{
235 Q_ASSERT(!mSeparatorCharacter.isNull()); 243 Q_ASSERT(!mSeparatorCharacter.isNull());
236 auto job = select(folder.pathParts.join(mSeparatorCharacter)).then<void, KAsync::Job<void>>([this, callback, folder]() -> KAsync::Job<void> { 244 return select(folder.pathParts.join(mSeparatorCharacter)).then<void, KAsync::Job<void>>([this, callback, folder]() -> KAsync::Job<void> {
237 return fetchHeaders(folder.pathParts.join(mSeparatorCharacter)).then<void, KAsync::Job<void>, QList<qint64>>([this, callback](const QList<qint64> &uidsToFetch){ 245 return fetchHeaders(folder.pathParts.join(mSeparatorCharacter)).then<void, KAsync::Job<void>, QList<qint64>>([this, callback](const QList<qint64> &uidsToFetch){
238 Trace() << "Uids to fetch: " << uidsToFetch; 246 Trace() << "Uids to fetch: " << uidsToFetch;
239 if (uidsToFetch.isEmpty()) { 247 if (uidsToFetch.isEmpty()) {
@@ -251,5 +259,4 @@ KAsync::Future<void> ImapServerProxy::fetchMessages(const Folder &folder, std::f
251 }); 259 });
252 260
253 }); 261 });
254 return job.exec();
255} 262}
diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h
index a5a1296..cf315df 100644
--- a/examples/imapresource/imapserverproxy.h
+++ b/examples/imapresource/imapserverproxy.h
@@ -69,6 +69,7 @@ public:
69 KAsync::Job<void> append(const QString &mailbox, const QByteArray &content, const QList<QByteArray> &flags = QList<QByteArray>(), const QDateTime &internalDate = QDateTime()); 69 KAsync::Job<void> append(const QString &mailbox, const QByteArray &content, const QList<QByteArray> &flags = QList<QByteArray>(), const QDateTime &internalDate = QDateTime());
70 KAsync::Job<void> store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags); 70 KAsync::Job<void> store(const KIMAP::ImapSet &set, const QList<QByteArray> &flags);
71 KAsync::Job<void> create(const QString &mailbox); 71 KAsync::Job<void> create(const QString &mailbox);
72 KAsync::Job<void> rename(const QString &mailbox, const QString &newMailbox);
72 KAsync::Job<void> remove(const QString &mailbox); 73 KAsync::Job<void> remove(const QString &mailbox);
73 KAsync::Job<void> expunge(); 74 KAsync::Job<void> expunge();
74 75
@@ -87,8 +88,8 @@ public:
87 KAsync::Job<QList<qint64>> fetchHeaders(const QString &mailbox); 88 KAsync::Job<QList<qint64>> fetchHeaders(const QString &mailbox);
88 KAsync::Job<void> remove(const QString &mailbox, const QByteArray &imapSet); 89 KAsync::Job<void> remove(const QString &mailbox, const QByteArray &imapSet);
89 90
90 KAsync::Future<void> fetchFolders(std::function<void(const QVector<Folder> &)> callback); 91 KAsync::Job<void> fetchFolders(std::function<void(const QVector<Folder> &)> callback);
91 KAsync::Future<void> fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback); 92 KAsync::Job<void> fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback);
92}; 93};
93 94
94} 95}
diff --git a/examples/imapresource/tests/imapserverproxytest.cpp b/examples/imapresource/tests/imapserverproxytest.cpp
index b30cc33..3761dac 100644
--- a/examples/imapresource/tests/imapserverproxytest.cpp
+++ b/examples/imapresource/tests/imapserverproxytest.cpp
@@ -80,18 +80,13 @@ private slots:
80 { 80 {
81 ImapServerProxy imap("localhost", 993); 81 ImapServerProxy imap("localhost", 993);
82 VERIFYEXEC(imap.login("doe", "doe")); 82 VERIFYEXEC(imap.login("doe", "doe"));
83 auto future = imap.fetchFolders([](const QVector<Folder> &){}); 83 VERIFYEXEC(imap.fetchFolders([](const QVector<Folder> &){}));
84 future.waitForFinished();
85 QVERIFY(!future.errorCode());
86 } 84 }
87 85
88 void testFetchFoldersFailure() 86 void testFetchFoldersFailure()
89 { 87 {
90 ImapServerProxy imap("foobar", 993); 88 ImapServerProxy imap("foobar", 993);
91 auto future = imap.fetchFolders([](const QVector<Folder> &){}); 89 VERIFYEXEC_FAIL(imap.fetchFolders([](const QVector<Folder> &){}));
92 auto future2 = future;
93 future2.waitForFinished();
94 QVERIFY(future2.errorCode());
95 } 90 }
96 91
97 void testFetchMail() 92 void testFetchMail()