summaryrefslogtreecommitdiffstats
path: root/common/resourcefacade.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-27 17:30:04 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-27 17:30:04 +0100
commit5b41b26a349967acf2197f9f9228526193fd826e (patch)
tree166452bcc0757564deefe233bf031d2ccb0564d2 /common/resourcefacade.cpp
parent13af56e436f49df32d3b2f6f223cf1dec2eabaac (diff)
downloadsink-5b41b26a349967acf2197f9f9228526193fd826e.tar.gz
sink-5b41b26a349967acf2197f9f9228526193fd826e.zip
Introduced a QueryRunner object
The QueryRunner object lives for the duration of the query (so just for the initial query for non-live queries, and for the lifetime of the result model for live queries). It's supposed to handle all the threading internally and decouple the lifetime of the facade.
Diffstat (limited to 'common/resourcefacade.cpp')
-rw-r--r--common/resourcefacade.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/common/resourcefacade.cpp b/common/resourcefacade.cpp
index 1796271..3d207e4 100644
--- a/common/resourcefacade.cpp
+++ b/common/resourcefacade.cpp
@@ -54,9 +54,15 @@ KAsync::Job<void> ResourceFacade::remove(const Akonadi2::ApplicationDomain::Akon
54 }); 54 });
55} 55}
56 56
57KAsync::Job<void> ResourceFacade::load(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface<typename Akonadi2::ApplicationDomain::AkonadiResource::Ptr> &resultProvider) 57QPair<KAsync::Job<void>, typename Akonadi2::ResultEmitter<Akonadi2::ApplicationDomain::AkonadiResource::Ptr>::Ptr > ResourceFacade::load(const Akonadi2::Query &query)
58{ 58{
59 return KAsync::start<void>([query, &resultProvider]() { 59 auto resultProvider = new Akonadi2::ResultProvider<typename Akonadi2::ApplicationDomain::AkonadiResource::Ptr>();
60 auto emitter = resultProvider->emitter();
61 resultProvider->setFetcher([](const QSharedPointer<Akonadi2::ApplicationDomain::AkonadiResource> &) {});
62 resultProvider->onDone([resultProvider]() {
63 delete resultProvider;
64 });
65 auto job = KAsync::start<void>([query, resultProvider]() {
60 const auto configuredResources = ResourceConfig::getResources(); 66 const auto configuredResources = ResourceConfig::getResources();
61 for (const auto &res : configuredResources.keys()) { 67 for (const auto &res : configuredResources.keys()) {
62 const auto type = configuredResources.value(res); 68 const auto type = configuredResources.value(res);
@@ -64,12 +70,13 @@ KAsync::Job<void> ResourceFacade::load(const Akonadi2::Query &query, Akonadi2::R
64 auto resource = Akonadi2::ApplicationDomain::AkonadiResource::Ptr::create(); 70 auto resource = Akonadi2::ApplicationDomain::AkonadiResource::Ptr::create();
65 resource->setProperty("identifier", res); 71 resource->setProperty("identifier", res);
66 resource->setProperty("type", type); 72 resource->setProperty("type", type);
67 resultProvider.add(resource); 73 resultProvider->add(resource);
68 } 74 }
69 } 75 }
70 //TODO initialResultSetComplete should be implicit 76 //TODO initialResultSetComplete should be implicit
71 resultProvider.initialResultSetComplete(); 77 resultProvider->initialResultSetComplete();
72 resultProvider.complete(); 78 resultProvider->complete();
73 }); 79 });
80 return qMakePair(job, emitter);
74} 81}
75 82