diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-05-22 14:41:09 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-05-22 14:41:09 +0200 |
commit | 3ae659d299b27ffb2a101254ad5e53ffebe566d2 (patch) | |
tree | 2a6a4bc104d9dcf99dbde4886adcb869c2ef9c2e | |
parent | 893c601d325c3f02ba29869baeb90c3f0a890005 (diff) | |
download | sink-3ae659d299b27ffb2a101254ad5e53ffebe566d2.tar.gz sink-3ae659d299b27ffb2a101254ad5e53ffebe566d2.zip |
Workaround for missing error propagation of each
-rw-r--r-- | common/store.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/common/store.cpp b/common/store.cpp index 9211b51..92915c4 100644 --- a/common/store.cpp +++ b/common/store.cpp | |||
@@ -201,12 +201,22 @@ KAsync::Job<void> Store::synchronize(const Sink::Query &query) | |||
201 | { | 201 | { |
202 | Trace() << "synchronize" << query.resources; | 202 | Trace() << "synchronize" << query.resources; |
203 | auto resources = getResources(query.resources, query.accounts).keys(); | 203 | auto resources = getResources(query.resources, query.accounts).keys(); |
204 | //FIXME only necessary because each doesn't propagate errors | ||
205 | auto error = new bool; | ||
204 | return KAsync::iterate(resources) | 206 | return KAsync::iterate(resources) |
205 | .template each<void, QByteArray>([query](const QByteArray &resource, KAsync::Future<void> &future) { | 207 | .template each<void, QByteArray>([query, error](const QByteArray &resource, KAsync::Future<void> &future) { |
206 | Trace() << "Synchronizing " << resource; | 208 | Trace() << "Synchronizing " << resource; |
207 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); | 209 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); |
208 | resourceAccess->open(); | 210 | resourceAccess->open(); |
209 | resourceAccess->synchronizeResource(true, false).then<void>([&future, resourceAccess]() { future.setFinished(); }).exec(); | 211 | resourceAccess->synchronizeResource(true, false).then<void>([resourceAccess, &future]() {Trace() << "synced."; future.setFinished(); }, |
212 | [&future, error](int errorCode, QString msg) { *error = true; Warning() << "Error during sync."; future.setError(errorCode, msg); }).exec(); | ||
213 | }).then<void>([error](KAsync::Future<void> &future) { | ||
214 | if (*error) { | ||
215 | future.setError(1, "Error during sync."); | ||
216 | } else { | ||
217 | future.setFinished(); | ||
218 | } | ||
219 | delete error; | ||
210 | }); | 220 | }); |
211 | } | 221 | } |
212 | 222 | ||