summaryrefslogtreecommitdiffstats
path: root/common/resourcefacade.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/resourcefacade.cpp')
-rw-r--r--common/resourcefacade.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/common/resourcefacade.cpp b/common/resourcefacade.cpp
index ba04b2f..65ff05c 100644
--- a/common/resourcefacade.cpp
+++ b/common/resourcefacade.cpp
@@ -28,7 +28,7 @@ template <typename DomainType>
28ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier; 28ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier;
29 29
30template <typename DomainType> 30template <typename DomainType>
31LocalStorageFacade<DomainType>::LocalStorageFacade(const QByteArray &identifier) : Sink::StoreFacade<DomainType>(), mConfigStore(identifier) 31LocalStorageFacade<DomainType>::LocalStorageFacade(const QByteArray &identifier) : Sink::StoreFacade<DomainType>(), mConfigStore(identifier), mResourceInstanceIdentifier(identifier)
32{ 32{
33} 33}
34 34
@@ -38,11 +38,11 @@ LocalStorageFacade<DomainType>::~LocalStorageFacade()
38} 38}
39 39
40template <typename DomainType> 40template <typename DomainType>
41typename DomainType::Ptr LocalStorageFacade<DomainType>::readFromConfig(const QByteArray &id, const QByteArray &type) 41typename DomainType::Ptr LocalStorageFacade<DomainType>::readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type)
42{ 42{
43 auto object = DomainType::Ptr::create(id); 43 auto object = DomainType::Ptr::create(id);
44 object->setProperty("type", type); 44 object->setProperty("type", type);
45 const auto configurationValues = mConfigStore.get(id); 45 const auto configurationValues = configStore.get(id);
46 for (auto it = configurationValues.constBegin(); it != configurationValues.constEnd(); it++) { 46 for (auto it = configurationValues.constBegin(); it != configurationValues.constEnd(); it++) {
47 object->setProperty(it.key(), it.value()); 47 object->setProperty(it.key(), it.value());
48 } 48 }
@@ -50,6 +50,12 @@ typename DomainType::Ptr LocalStorageFacade<DomainType>::readFromConfig(const QB
50} 50}
51 51
52template <typename DomainType> 52template <typename DomainType>
53typename DomainType::Ptr LocalStorageFacade<DomainType>::readFromConfig(const QByteArray &id, const QByteArray &type)
54{
55 return readFromConfig(mConfigStore, id, type);
56}
57
58template <typename DomainType>
53KAsync::Job<void> LocalStorageFacade<DomainType>::create(const DomainType &domainObject) 59KAsync::Job<void> LocalStorageFacade<DomainType>::create(const DomainType &domainObject)
54{ 60{
55 return KAsync::start<void>([domainObject, this]() { 61 return KAsync::start<void>([domainObject, this]() {
@@ -132,9 +138,9 @@ QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename DomainType::Ptr>:
132 QObject *guard = new QObject; 138 QObject *guard = new QObject;
133 auto resultProvider = new Sink::ResultProvider<typename DomainType::Ptr>(); 139 auto resultProvider = new Sink::ResultProvider<typename DomainType::Ptr>();
134 auto emitter = resultProvider->emitter(); 140 auto emitter = resultProvider->emitter();
135 resultProvider->setFetcher([](const QSharedPointer<DomainType> &) {}); 141 auto identifier = mResourceInstanceIdentifier;
136 resultProvider->onDone([=]() { delete resultProvider; delete guard; }); 142 resultProvider->setFetcher([identifier, query, guard, resultProvider](const QSharedPointer<DomainType> &) {
137 auto job = KAsync::start<void>([=]() { 143 ConfigStore mConfigStore(identifier);
138 const auto entries = mConfigStore.getEntries(); 144 const auto entries = mConfigStore.getEntries();
139 for (const auto &res : entries.keys()) { 145 for (const auto &res : entries.keys()) {
140 const auto type = entries.value(res); 146 const auto type = entries.value(res);
@@ -152,7 +158,7 @@ QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename DomainType::Ptr>:
152 continue; 158 continue;
153 } 159 }
154 Trace() << "Found match " << res; 160 Trace() << "Found match " << res;
155 resultProvider->add(readFromConfig(res, type)); 161 resultProvider->add(readFromConfig(mConfigStore, res, type));
156 } 162 }
157 if (query.liveQuery) { 163 if (query.liveQuery) {
158 QObject::connect(&sConfigNotifier, &ConfigNotifier::modified, guard, [resultProvider](const Sink::ApplicationDomain::ApplicationDomainType::Ptr &entry) { 164 QObject::connect(&sConfigNotifier, &ConfigNotifier::modified, guard, [resultProvider](const Sink::ApplicationDomain::ApplicationDomainType::Ptr &entry) {
@@ -169,7 +175,9 @@ QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename DomainType::Ptr>:
169 resultProvider->initialResultSetComplete(typename DomainType::Ptr()); 175 resultProvider->initialResultSetComplete(typename DomainType::Ptr());
170 resultProvider->complete(); 176 resultProvider->complete();
171 }); 177 });
172 return qMakePair(job, emitter); 178 resultProvider->onDone([=]() { delete resultProvider; delete guard; });
179
180 return qMakePair(KAsync::null<void>(), emitter);
173} 181}
174 182
175 183