diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-04-18 10:26:47 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-04-18 12:15:24 +0200 |
commit | e2857def8e67c3a95656f9d4737beba93a38c53a (patch) | |
tree | 2e824f5e185b5273728edaa314ebbbbe7f97f68e /dummyresource/facade.cpp | |
parent | bbb7c128488d0bc1dbedd4fe9f8a7a4de778705b (diff) | |
download | sink-e2857def8e67c3a95656f9d4737beba93a38c53a.tar.gz sink-e2857def8e67c3a95656f9d4737beba93a38c53a.zip |
Moved generic part of load to GenericFacade
Diffstat (limited to 'dummyresource/facade.cpp')
-rw-r--r-- | dummyresource/facade.cpp | 42 |
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 | ||
150 | Async::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 | |||
190 | Async::Job<qint64> DummyResourceFacade::load(const Akonadi2::Query &query, const std::function<void(const Akonadi2::ApplicationDomain::Event::Ptr &)> &resultCallback) | 150 | Async::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 | ||