From 1aa82ab9cfacca1ee9af9f9137caeede55f89230 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 13 Dec 2015 19:21:52 +0100 Subject: Load entities from multiple resources --- common/clientapi.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'common/clientapi.cpp') diff --git a/common/clientapi.cpp b/common/clientapi.cpp index 644d60c..46f7534 100644 --- a/common/clientapi.cpp +++ b/common/clientapi.cpp @@ -98,22 +98,24 @@ QSharedPointer Store::loadModel(Query query) resultProvider->initialResultSetComplete(typename DomainType::Ptr()); return model; } + auto aggregatingEmitter = AggregatingResultEmitter::Ptr::create(); + model->setEmitter(aggregatingEmitter); KAsync::iterate(resources) - .template each([query, model](const QByteArray &resource, KAsync::Future &future) { + .template each([query, aggregatingEmitter](const QByteArray &resource, KAsync::Future &future) { auto facade = FacadeFactory::instance().getFacade(resourceName(resource), resource); if (facade) { - Trace() << "Trying to fetch from resource"; + Trace() << "Trying to fetch from resource " << resource; auto result = facade->load(query); - auto emitter = result.second; - //TODO use aggregating emitter instead - model->setEmitter(emitter); - model->fetchMore(QModelIndex()); + aggregatingEmitter->addEmitter(result.second); result.first.template then([&future](){future.setFinished();}).exec(); } else { + Trace() << "Couldn' find a facade for " << resource; //Ignore the error and carry on future.setFinished(); } }).exec(); + //TODO if the aggregatingEmitter is still empty we're done + model->fetchMore(QModelIndex()); return model; } -- cgit v1.2.3