diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-13 19:21:52 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-13 19:21:52 +0100 |
commit | 1aa82ab9cfacca1ee9af9f9137caeede55f89230 (patch) | |
tree | de1b6e2193fdc4213178da748beb5c388d01af0a /common/clientapi.cpp | |
parent | 1999bbb377561e6e83c126de536a26df18870970 (diff) | |
download | sink-1aa82ab9cfacca1ee9af9f9137caeede55f89230.tar.gz sink-1aa82ab9cfacca1ee9af9f9137caeede55f89230.zip |
Load entities from multiple resources
Diffstat (limited to 'common/clientapi.cpp')
-rw-r--r-- | common/clientapi.cpp | 14 |
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 | } |