summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/resourcefacade.cpp33
-rw-r--r--common/store.cpp2
2 files changed, 24 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();
diff --git a/common/store.cpp b/common/store.cpp
index 727f4cc..264f2e3 100644
--- a/common/store.cpp
+++ b/common/store.cpp
@@ -92,6 +92,7 @@ QPair<typename AggregatingResultEmitter<typename DomainType::Ptr>::Ptr, typenam
92 auto facade = FacadeFactory::instance().getFacade<ApplicationDomain::SinkResource>(); 92 auto facade = FacadeFactory::instance().getFacade<ApplicationDomain::SinkResource>();
93 Q_ASSERT(facade); 93 Q_ASSERT(facade);
94 Sink::Query resourceQuery; 94 Sink::Query resourceQuery;
95 resourceQuery.request<ApplicationDomain::SinkResource::Capabilities>();
95 if (query.liveQuery()) { 96 if (query.liveQuery()) {
96 SinkTraceCtx(ctx) << "Listening for new resources."; 97 SinkTraceCtx(ctx) << "Listening for new resources.";
97 resourceQuery.setFlags(Query::LiveQuery); 98 resourceQuery.setFlags(Query::LiveQuery);
@@ -103,6 +104,7 @@ QPair<typename AggregatingResultEmitter<typename DomainType::Ptr>::Ptr, typenam
103 resourceFilter.propertyFilter.insert(ApplicationDomain::SinkResource::Capabilities::name, Query::Comparator{ApplicationDomain::getTypeName<DomainType>(), Query::Comparator::Contains}); 104 resourceFilter.propertyFilter.insert(ApplicationDomain::SinkResource::Capabilities::name, Query::Comparator{ApplicationDomain::getTypeName<DomainType>(), Query::Comparator::Contains});
104 } 105 }
105 resourceQuery.setFilter(resourceFilter); 106 resourceQuery.setFilter(resourceFilter);
107 resourceQuery.requestedProperties << resourceFilter.propertyFilter.keys();
106 108
107 auto result = facade->load(resourceQuery, resourceCtx); 109 auto result = facade->load(resourceQuery, resourceCtx);
108 auto emitter = result.second; 110 auto emitter = result.second;