diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-02 13:35:40 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-02 13:35:40 +0200 |
commit | 855a878bcc124f8949586b3656dcc6e545e18dc0 (patch) | |
tree | 6497f1710ba3db8953d204032e5e8c14a239ad33 | |
parent | 64a1b21a7b11d640f0ebd37184aeb14a4d9e12db (diff) | |
download | sink-855a878bcc124f8949586b3656dcc6e545e18dc0.tar.gz sink-855a878bcc124f8949586b3656dcc6e545e18dc0.zip |
Always return jobs, not futures.
Otherwise the calls are not composable.
-rw-r--r-- | examples/imapresource/imapresource.cpp | 5 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.cpp | 19 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.h | 5 | ||||
-rw-r--r-- | examples/imapresource/tests/imapserverproxytest.cpp | 9 |
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 | ||
56 | using namespace Imap; | 56 | using namespace Imap; |
57 | using namespace Sink; | ||
57 | 58 | ||
58 | class MailPropertyExtractor : public Sink::Preprocessor | 59 | class 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 | ||
117 | KAsync::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 | |||
116 | KAsync::Job<void> ImapServerProxy::remove(const QString &mailbox) | 125 | KAsync::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 | ||
219 | KAsync::Future<void> ImapServerProxy::fetchFolders(std::function<void(const QVector<Folder> &)> callback) | 228 | KAsync::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 | ||
233 | KAsync::Future<void> ImapServerProxy::fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback) | 241 | KAsync::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() |