summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/store.cpp14
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