summaryrefslogtreecommitdiffstats
path: root/common/resourcefacade.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-03-14 17:01:55 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-03-14 17:01:55 +0100
commite02d87969f9c071e2dec52573a78b8b45dc7263f (patch)
tree8e66b4ef3a20e63e3382c2da9cea5e950d43d253 /common/resourcefacade.cpp
parent0206e5b938b1ac3925bcd67d57db3e43c53e67e3 (diff)
downloadsink-e02d87969f9c071e2dec52573a78b8b45dc7263f.tar.gz
sink-e02d87969f9c071e2dec52573a78b8b45dc7263f.zip
Always request properties we use and in turn avoid getting errors
...by setting dummy values for properties we do not actually have set in the config.
Diffstat (limited to 'common/resourcefacade.cpp')
-rw-r--r--common/resourcefacade.cpp33
1 files changed, 22 insertions, 11 deletions
diff --git a/common/resourcefacade.cpp b/common/resourcefacade.cpp
index 4a8037d..c702777 100644
--- a/common/resourcefacade.cpp
+++ b/common/resourcefacade.cpp
@@ -34,33 +34,42 @@ SINK_DEBUG_AREA("ResourceFacade")
34template<typename DomainType> 34template<typename DomainType>
35ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier; 35ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier;
36 36
37static void applyConfig(ConfigStore &configStore, const QByteArray &id, ApplicationDomain::ApplicationDomainType &object) 37static void applyConfig(ConfigStore &configStore, const QByteArray &id, ApplicationDomain::ApplicationDomainType &object, const QByteArrayList &requestedProperties)
38{ 38{
39 const auto configurationValues = configStore.get(id); 39 const auto configurationValues = configStore.get(id);
40 for (auto it = configurationValues.constBegin(); it != configurationValues.constEnd(); it++) { 40 for (auto it = configurationValues.constBegin(); it != configurationValues.constEnd(); it++) {
41 object.setProperty(it.key(), it.value()); 41 object.setProperty(it.key(), it.value());
42 } 42 }
43 //Populate the object with dummy values for non-available but requested properties.
44 //This avoid a warning about non-existing properties in bufferadaptor.h
45 if (!requestedProperties.isEmpty()) {
46 for (const auto &requested: requestedProperties) {
47 if (!object.hasProperty(requested)) {
48 object.setProperty(requested, QVariant{});
49 }
50 }
51 }
43} 52}
44 53
45template <typename DomainType> 54template <typename DomainType>
46static typename DomainType::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type) 55static typename DomainType::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type, const QByteArrayList &requestedProperties)
47{ 56{
48 auto object = DomainType::Ptr::create(id); 57 auto object = DomainType::Ptr::create(id);
49 applyConfig(configStore, id, *object); 58 applyConfig(configStore, id, *object, requestedProperties);
50 return object; 59 return object;
51} 60}
52 61
53template <> 62template <>
54typename ApplicationDomain::SinkAccount::Ptr readFromConfig<ApplicationDomain::SinkAccount>(ConfigStore &configStore, const QByteArray &id, const QByteArray &type) 63typename ApplicationDomain::SinkAccount::Ptr readFromConfig<ApplicationDomain::SinkAccount>(ConfigStore &configStore, const QByteArray &id, const QByteArray &type, const QByteArrayList &requestedProperties)
55{ 64{
56 auto object = ApplicationDomain::SinkAccount::Ptr::create(id); 65 auto object = ApplicationDomain::SinkAccount::Ptr::create(id);
57 object->setProperty(ApplicationDomain::SinkAccount::AccountType::name, type); 66 object->setProperty(ApplicationDomain::SinkAccount::AccountType::name, type);
58 applyConfig(configStore, id, *object); 67 applyConfig(configStore, id, *object, requestedProperties);
59 return object; 68 return object;
60} 69}
61 70
62template <> 71template <>
63typename ApplicationDomain::SinkResource::Ptr readFromConfig<ApplicationDomain::SinkResource>(ConfigStore &configStore, const QByteArray &id, const QByteArray &type) 72typename ApplicationDomain::SinkResource::Ptr readFromConfig<ApplicationDomain::SinkResource>(ConfigStore &configStore, const QByteArray &id, const QByteArray &type, const QByteArrayList &requestedProperties)
64{ 73{
65 auto object = ApplicationDomain::SinkResource::Ptr::create(id); 74 auto object = ApplicationDomain::SinkResource::Ptr::create(id);
66 object->setProperty(ApplicationDomain::SinkResource::ResourceType::name, type); 75 object->setProperty(ApplicationDomain::SinkResource::ResourceType::name, type);
@@ -70,7 +79,7 @@ typename ApplicationDomain::SinkResource::Ptr readFromConfig<ApplicationDomain::
70 object->setCapabilities(res->capabilities()); 79 object->setCapabilities(res->capabilities());
71 } 80 }
72 } 81 }
73 applyConfig(configStore, id, *object); 82 applyConfig(configStore, id, *object, requestedProperties);
74 return object; 83 return object;
75} 84}
76 85
@@ -104,7 +113,7 @@ LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query,
104 if (!query.ids().isEmpty() && !query.ids().contains(res)) { 113 if (!query.ids().isEmpty() && !query.ids().contains(res)) {
105 continue; 114 continue;
106 } 115 }
107 auto entity = readFromConfig<DomainType>(mConfigStore, res, type); 116 auto entity = readFromConfig<DomainType>(mConfigStore, res, type, query.requestedProperties);
108 if (!matchesFilter(query.getBaseFilters(), *entity)){ 117 if (!matchesFilter(query.getBaseFilters(), *entity)){
109 SinkTraceCtx(mLogCtx) << "Skipping due to filter." << res; 118 SinkTraceCtx(mLogCtx) << "Skipping due to filter." << res;
110 continue; 119 continue;
@@ -169,7 +178,7 @@ template<typename DomainType>
169void LocalStorageQueryRunner<DomainType>::statusChanged(const QByteArray &identifier) 178void LocalStorageQueryRunner<DomainType>::statusChanged(const QByteArray &identifier)
170{ 179{
171 SinkTraceCtx(mLogCtx) << "Status changed " << identifier; 180 SinkTraceCtx(mLogCtx) << "Status changed " << identifier;
172 auto entity = readFromConfig<DomainType>(mConfigStore, identifier, ApplicationDomain::getTypeName<DomainType>()); 181 auto entity = readFromConfig<DomainType>(mConfigStore, identifier, ApplicationDomain::getTypeName<DomainType>(), QByteArrayList{});
173 updateStatus(*entity); 182 updateStatus(*entity);
174 mResultProvider->modify(entity); 183 mResultProvider->modify(entity);
175} 184}
@@ -213,7 +222,7 @@ KAsync::Job<void> LocalStorageFacade<DomainType>::create(const DomainType &domai
213 } 222 }
214 configStore.modify(identifier, configurationValues); 223 configStore.modify(identifier, configurationValues);
215 } 224 }
216 sConfigNotifier.add(::readFromConfig<DomainType>(configStore, identifier, type)); 225 sConfigNotifier.add(::readFromConfig<DomainType>(configStore, identifier, type, QByteArrayList{}));
217 }); 226 });
218} 227}
219 228
@@ -242,7 +251,7 @@ KAsync::Job<void> LocalStorageFacade<DomainType>::modify(const DomainType &domai
242 } 251 }
243 252
244 const auto type = configStore.getEntries().value(identifier); 253 const auto type = configStore.getEntries().value(identifier);
245 sConfigNotifier.modify(::readFromConfig<DomainType>(configStore, identifier, type)); 254 sConfigNotifier.modify(::readFromConfig<DomainType>(configStore, identifier, type, QByteArrayList{}));
246 }); 255 });
247} 256}
248 257
@@ -337,6 +346,8 @@ QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain
337 runner->setStatusUpdater([runner, monitoredResources, ctx](ApplicationDomain::SinkAccount &account) { 346 runner->setStatusUpdater([runner, monitoredResources, ctx](ApplicationDomain::SinkAccount &account) {
338 Query query; 347 Query query;
339 query.filter<ApplicationDomain::SinkResource::Account>(account.identifier()); 348 query.filter<ApplicationDomain::SinkResource::Account>(account.identifier());
349 query.request<ApplicationDomain::SinkResource::Account>()
350 .request<ApplicationDomain::SinkResource::Capabilities>();
340 const auto resources = Store::read<ApplicationDomain::SinkResource>(query); 351 const auto resources = Store::read<ApplicationDomain::SinkResource>(query);
341 SinkTraceCtx(ctx) << "Found resource belonging to the account " << account.identifier() << " : " << resources; 352 SinkTraceCtx(ctx) << "Found resource belonging to the account " << account.identifier() << " : " << resources;
342 auto accountIdentifier = account.identifier(); 353 auto accountIdentifier = account.identifier();