From e02d87969f9c071e2dec52573a78b8b45dc7263f Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 14 Mar 2017 17:01:55 +0100 Subject: 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. --- common/resourcefacade.cpp | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'common/resourcefacade.cpp') 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") template ConfigNotifier LocalStorageFacade::sConfigNotifier; -static void applyConfig(ConfigStore &configStore, const QByteArray &id, ApplicationDomain::ApplicationDomainType &object) +static void applyConfig(ConfigStore &configStore, const QByteArray &id, ApplicationDomain::ApplicationDomainType &object, const QByteArrayList &requestedProperties) { const auto configurationValues = configStore.get(id); for (auto it = configurationValues.constBegin(); it != configurationValues.constEnd(); it++) { object.setProperty(it.key(), it.value()); } + //Populate the object with dummy values for non-available but requested properties. + //This avoid a warning about non-existing properties in bufferadaptor.h + if (!requestedProperties.isEmpty()) { + for (const auto &requested: requestedProperties) { + if (!object.hasProperty(requested)) { + object.setProperty(requested, QVariant{}); + } + } + } } template -static typename DomainType::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type) +static typename DomainType::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type, const QByteArrayList &requestedProperties) { auto object = DomainType::Ptr::create(id); - applyConfig(configStore, id, *object); + applyConfig(configStore, id, *object, requestedProperties); return object; } template <> -typename ApplicationDomain::SinkAccount::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type) +typename ApplicationDomain::SinkAccount::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type, const QByteArrayList &requestedProperties) { auto object = ApplicationDomain::SinkAccount::Ptr::create(id); object->setProperty(ApplicationDomain::SinkAccount::AccountType::name, type); - applyConfig(configStore, id, *object); + applyConfig(configStore, id, *object, requestedProperties); return object; } template <> -typename ApplicationDomain::SinkResource::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type) +typename ApplicationDomain::SinkResource::Ptr readFromConfig(ConfigStore &configStore, const QByteArray &id, const QByteArray &type, const QByteArrayList &requestedProperties) { auto object = ApplicationDomain::SinkResource::Ptr::create(id); object->setProperty(ApplicationDomain::SinkResource::ResourceType::name, type); @@ -70,7 +79,7 @@ typename ApplicationDomain::SinkResource::Ptr readFromConfigsetCapabilities(res->capabilities()); } } - applyConfig(configStore, id, *object); + applyConfig(configStore, id, *object, requestedProperties); return object; } @@ -104,7 +113,7 @@ LocalStorageQueryRunner::LocalStorageQueryRunner(const Query &query, if (!query.ids().isEmpty() && !query.ids().contains(res)) { continue; } - auto entity = readFromConfig(mConfigStore, res, type); + auto entity = readFromConfig(mConfigStore, res, type, query.requestedProperties); if (!matchesFilter(query.getBaseFilters(), *entity)){ SinkTraceCtx(mLogCtx) << "Skipping due to filter." << res; continue; @@ -169,7 +178,7 @@ template void LocalStorageQueryRunner::statusChanged(const QByteArray &identifier) { SinkTraceCtx(mLogCtx) << "Status changed " << identifier; - auto entity = readFromConfig(mConfigStore, identifier, ApplicationDomain::getTypeName()); + auto entity = readFromConfig(mConfigStore, identifier, ApplicationDomain::getTypeName(), QByteArrayList{}); updateStatus(*entity); mResultProvider->modify(entity); } @@ -213,7 +222,7 @@ KAsync::Job LocalStorageFacade::create(const DomainType &domai } configStore.modify(identifier, configurationValues); } - sConfigNotifier.add(::readFromConfig(configStore, identifier, type)); + sConfigNotifier.add(::readFromConfig(configStore, identifier, type, QByteArrayList{})); }); } @@ -242,7 +251,7 @@ KAsync::Job LocalStorageFacade::modify(const DomainType &domai } const auto type = configStore.getEntries().value(identifier); - sConfigNotifier.modify(::readFromConfig(configStore, identifier, type)); + sConfigNotifier.modify(::readFromConfig(configStore, identifier, type, QByteArrayList{})); }); } @@ -337,6 +346,8 @@ QPair, typename Sink::ResultEmittersetStatusUpdater([runner, monitoredResources, ctx](ApplicationDomain::SinkAccount &account) { Query query; query.filter(account.identifier()); + query.request() + .request(); const auto resources = Store::read(query); SinkTraceCtx(ctx) << "Found resource belonging to the account " << account.identifier() << " : " << resources; auto accountIdentifier = account.identifier(); -- cgit v1.2.3