summaryrefslogtreecommitdiffstats
path: root/dummyresource/facade.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-04-18 10:26:47 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-04-18 12:15:24 +0200
commite2857def8e67c3a95656f9d4737beba93a38c53a (patch)
tree2e824f5e185b5273728edaa314ebbbbe7f97f68e /dummyresource/facade.cpp
parentbbb7c128488d0bc1dbedd4fe9f8a7a4de778705b (diff)
downloadsink-e2857def8e67c3a95656f9d4737beba93a38c53a.tar.gz
sink-e2857def8e67c3a95656f9d4737beba93a38c53a.zip
Moved generic part of load to GenericFacade
Diffstat (limited to 'dummyresource/facade.cpp')
-rw-r--r--dummyresource/facade.cpp42
1 files changed, 1 insertions, 41 deletions
diff --git a/dummyresource/facade.cpp b/dummyresource/facade.cpp
index da2a27a..e50e4f3 100644
--- a/dummyresource/facade.cpp
+++ b/dummyresource/facade.cpp
@@ -147,49 +147,9 @@ void DummyResourceFacade::readValue(QSharedPointer<Akonadi2::Storage> storage, c
147 }); 147 });
148} 148}
149 149
150Async::Job<void> DummyResourceFacade::load(const Akonadi2::Query &query, const QSharedPointer<Akonadi2::ResultProvider<Akonadi2::ApplicationDomain::Event::Ptr> > &resultProvider)
151{
152 auto runner = QSharedPointer<QueryRunner>::create(query);
153 QWeakPointer<Akonadi2::ResultProvider<Akonadi2::ApplicationDomain::Event::Ptr> > weakResultProvider = resultProvider;
154 runner->setQuery([this, weakResultProvider, query] (qint64 oldRevision, qint64 newRevision) -> Async::Job<qint64> {
155 return Async::start<qint64>([this, weakResultProvider, query](Async::Future<qint64> &future) {
156 auto resultProvider = weakResultProvider.toStrongRef();
157 if (!resultProvider) {
158 Warning() << "Tried executing query after result provider is already gone";
159 future.setError(0, QString());
160 future.setFinished();
161 return;
162 }
163 //TODO only emit changes and don't replace everything
164 resultProvider->clear();
165 //rerun query
166 auto addCallback = std::bind(&Akonadi2::ResultProvider<Akonadi2::ApplicationDomain::Event::Ptr>::add, resultProvider, std::placeholders::_1);
167 load(query, addCallback).then<void, qint64>([resultProvider, &future](qint64 queriedRevision) {
168 //TODO set revision in result provider?
169 //TODO update all existing results with new revision
170 resultProvider->complete();
171 future.setValue(queriedRevision);
172 future.setFinished();
173 }).exec();
174 });
175 });
176
177 //In case of a live query we keep the runner for as long alive as the result provider exists
178 if (query.liveQuery) {
179 resultProvider->setQueryRunner(runner);
180 QObject::connect(mResourceAccess.data(), &Akonadi2::ResourceAccess::revisionChanged, runner.data(), &QueryRunner::revisionChanged);
181 }
182
183 return Async::start<void>([runner](Async::Future<void> &future) {
184 runner->run().then<void>([&future]() {
185 future.setFinished();
186 }).exec();
187 });
188}
189
190Async::Job<qint64> DummyResourceFacade::load(const Akonadi2::Query &query, const std::function<void(const Akonadi2::ApplicationDomain::Event::Ptr &)> &resultCallback) 150Async::Job<qint64> DummyResourceFacade::load(const Akonadi2::Query &query, const std::function<void(const Akonadi2::ApplicationDomain::Event::Ptr &)> &resultCallback)
191{ 151{
192 return synchronizeResource(query.syncOnDemand, query.processAll).then<qint64>([=](Async::Future<qint64> &future) { 152 return Async::start<qint64>([=](Async::Future<qint64> &future) {
193 //Now that the sync is complete we can execute the query 153 //Now that the sync is complete we can execute the query
194 const auto preparedQuery = prepareQuery(query); 154 const auto preparedQuery = prepareQuery(query);
195 155