From f4a22e49f23c930b244a1c7f33c7efb9e285750c Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 4 Nov 2016 10:45:20 +0100 Subject: Error propagation works in kasync now. --- common/store.cpp | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) (limited to 'common/store.cpp') diff --git a/common/store.cpp b/common/store.cpp index 52fec2e..d569133 100644 --- a/common/store.cpp +++ b/common/store.cpp @@ -57,15 +57,15 @@ QString Store::getTemporaryFilePath() /* * Returns a map of resource instance identifiers and resource type */ -static QMap getResources(const Sink::Query &query, const QByteArray &type = QByteArray()) +static QMap getResources(const Sink::Query::Filter &query, const QByteArray &type = QByteArray()) { - const QList resourceFilter = query.getResourceFilter().ids; + const QList resourceFilter = query.ids; const auto filterResource = [&](const QByteArray &res) { const auto configuration = ResourceConfig::getConfiguration(res); - for (const auto &filterProperty : query.getResourceFilter().propertyFilter.keys()) { - const auto filter = query.getResourceFilter().propertyFilter.value(filterProperty); + for (const auto &filterProperty : query.propertyFilter.keys()) { + const auto filter = query.propertyFilter.value(filterProperty); if (!filter.matches(configuration.value(filterProperty))) { return true; } @@ -145,7 +145,7 @@ QSharedPointer Store::loadModel(Query query) //* The result provider needs to live for as long as results are provided (until the last thread exits). // Query all resources and aggregate results - auto resources = getResources(query, ApplicationDomain::getTypeName()); + auto resources = getResources(query.getResourceFilter(), ApplicationDomain::getTypeName()); auto aggregatingEmitter = AggregatingResultEmitter::Ptr::create(); model->setEmitter(aggregatingEmitter); @@ -257,33 +257,22 @@ KAsync::Job Store::removeDataFromDisk(const QByteArray &identifier) KAsync::Job Store::synchronize(const Sink::Query &query) { - auto resources = getResources(query).keys(); + auto resources = getResources(query.getResourceFilter()).keys(); SinkTrace() << "synchronize" << resources; - //FIXME only necessary because each doesn't propagate errors - auto errorFlag = new bool; return KAsync::value(resources) - .template each([query, errorFlag](const QByteArray &resource) { + .template each([query](const QByteArray &resource) { SinkTrace() << "Synchronizing " << resource; auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); - resourceAccess->open(); return resourceAccess->synchronizeResource(true, false) .addToContext(resourceAccess) - .then([errorFlag](const KAsync::Error &error) { + .then([](const KAsync::Error &error) { if (error) { - *errorFlag = true; SinkWarning() << "Error during sync."; return KAsync::error(error); } SinkTrace() << "synced."; return KAsync::null(); }); - }) - .then([errorFlag]() { - if (*errorFlag) { - return KAsync::error("Error during sync."); - } - delete errorFlag; - return KAsync::null(); }); } @@ -358,7 +347,7 @@ QList Store::read(const Sink::Query &q) query.synchronousQuery = true; query.liveQuery = false; QList list; - auto resources = getResources(query, ApplicationDomain::getTypeName()); + auto resources = getResources(query.getResourceFilter(), ApplicationDomain::getTypeName()); auto aggregatingEmitter = AggregatingResultEmitter::Ptr::create(); aggregatingEmitter->onAdded([&list](const typename DomainType::Ptr &value){ SinkTrace() << "Found value: " << value->identifier(); -- cgit v1.2.3