summaryrefslogtreecommitdiffstats
path: root/common/clientapi.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-13 19:21:52 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-13 19:21:52 +0100
commit1aa82ab9cfacca1ee9af9f9137caeede55f89230 (patch)
treede1b6e2193fdc4213178da748beb5c388d01af0a /common/clientapi.cpp
parent1999bbb377561e6e83c126de536a26df18870970 (diff)
downloadsink-1aa82ab9cfacca1ee9af9f9137caeede55f89230.tar.gz
sink-1aa82ab9cfacca1ee9af9f9137caeede55f89230.zip
Load entities from multiple resources
Diffstat (limited to 'common/clientapi.cpp')
-rw-r--r--common/clientapi.cpp14
1 files changed, 8 insertions, 6 deletions
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<QAbstractItemModel> Store::loadModel(Query query)
98 resultProvider->initialResultSetComplete(typename DomainType::Ptr()); 98 resultProvider->initialResultSetComplete(typename DomainType::Ptr());
99 return model; 99 return model;
100 } 100 }
101 auto aggregatingEmitter = AggregatingResultEmitter<typename DomainType::Ptr>::Ptr::create();
102 model->setEmitter(aggregatingEmitter);
101 KAsync::iterate(resources) 103 KAsync::iterate(resources)
102 .template each<void, QByteArray>([query, model](const QByteArray &resource, KAsync::Future<void> &future) { 104 .template each<void, QByteArray>([query, aggregatingEmitter](const QByteArray &resource, KAsync::Future<void> &future) {
103 auto facade = FacadeFactory::instance().getFacade<DomainType>(resourceName(resource), resource); 105 auto facade = FacadeFactory::instance().getFacade<DomainType>(resourceName(resource), resource);
104 if (facade) { 106 if (facade) {
105 Trace() << "Trying to fetch from resource"; 107 Trace() << "Trying to fetch from resource " << resource;
106 auto result = facade->load(query); 108 auto result = facade->load(query);
107 auto emitter = result.second; 109 aggregatingEmitter->addEmitter(result.second);
108 //TODO use aggregating emitter instead
109 model->setEmitter(emitter);
110 model->fetchMore(QModelIndex());
111 result.first.template then<void>([&future](){future.setFinished();}).exec(); 110 result.first.template then<void>([&future](){future.setFinished();}).exec();
112 } else { 111 } else {
112 Trace() << "Couldn' find a facade for " << resource;
113 //Ignore the error and carry on 113 //Ignore the error and carry on
114 future.setFinished(); 114 future.setFinished();
115 } 115 }
116 }).exec(); 116 }).exec();
117 //TODO if the aggregatingEmitter is still empty we're done
118 model->fetchMore(QModelIndex());
117 119
118 return model; 120 return model;
119} 121}