From 3ae659d299b27ffb2a101254ad5e53ffebe566d2 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 22 May 2016 14:41:09 +0200 Subject: Workaround for missing error propagation of each --- common/store.cpp | 14 ++++++++++++-- 1 file 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 Store::synchronize(const Sink::Query &query) { Trace() << "synchronize" << query.resources; auto resources = getResources(query.resources, query.accounts).keys(); + //FIXME only necessary because each doesn't propagate errors + auto error = new bool; return KAsync::iterate(resources) - .template each([query](const QByteArray &resource, KAsync::Future &future) { + .template each([query, error](const QByteArray &resource, KAsync::Future &future) { Trace() << "Synchronizing " << resource; auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); resourceAccess->open(); - resourceAccess->synchronizeResource(true, false).then([&future, resourceAccess]() { future.setFinished(); }).exec(); + resourceAccess->synchronizeResource(true, false).then([resourceAccess, &future]() {Trace() << "synced."; future.setFinished(); }, + [&future, error](int errorCode, QString msg) { *error = true; Warning() << "Error during sync."; future.setError(errorCode, msg); }).exec(); + }).then([error](KAsync::Future &future) { + if (*error) { + future.setError(1, "Error during sync."); + } else { + future.setFinished(); + } + delete error; }); } -- cgit v1.2.3