diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-15 07:04:38 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-15 07:12:13 +0200 |
commit | 49f08fa2fadb3ff1340af02be27045e92566dd58 (patch) | |
tree | 790459634dbf37ff395112fc9b553481d6a355ab /common/resourcefacade.cpp | |
parent | 80d8ad9f3b10bb8ad3123d1b18f2cd2cd816d452 (diff) | |
download | sink-49f08fa2fadb3ff1340af02be27045e92566dd58.tar.gz sink-49f08fa2fadb3ff1340af02be27045e92566dd58.zip |
Fixed LocalStorageFacade.
We can't make any assumptions about the lifetime of the facade, so make
sure we have all we need in the lambda.
Diffstat (limited to 'common/resourcefacade.cpp')
-rw-r--r-- | common/resourcefacade.cpp | 24 |
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> | |||
28 | ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier; | 28 | ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier; |
29 | 29 | ||
30 | template <typename DomainType> | 30 | template <typename DomainType> |
31 | LocalStorageFacade<DomainType>::LocalStorageFacade(const QByteArray &identifier) : Sink::StoreFacade<DomainType>(), mConfigStore(identifier) | 31 | LocalStorageFacade<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 | ||
40 | template <typename DomainType> | 40 | template <typename DomainType> |
41 | typename DomainType::Ptr LocalStorageFacade<DomainType>::readFromConfig(const QByteArray &id, const QByteArray &type) | 41 | typename 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 | ||
52 | template <typename DomainType> | 52 | template <typename DomainType> |
53 | typename DomainType::Ptr LocalStorageFacade<DomainType>::readFromConfig(const QByteArray &id, const QByteArray &type) | ||
54 | { | ||
55 | return readFromConfig(mConfigStore, id, type); | ||
56 | } | ||
57 | |||
58 | template <typename DomainType> | ||
53 | KAsync::Job<void> LocalStorageFacade<DomainType>::create(const DomainType &domainObject) | 59 | KAsync::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 | ||