diff options
| author | Dominik Holland <dominik.holland@qt.io> | 2022-11-24 16:50:31 +0100 |
|---|---|---|
| committer | Dominik Holland <dominik.holland@qt.io> | 2022-12-07 11:29:19 +0100 |
| commit | 5085f5f1ec3c194afec2aef77a6519bc151bcccd (patch) | |
| tree | c2573add38cbdba49f129a74fe3c87f77569613a /src | |
| parent | 5bdda53b86fddfebc322c4b7fe50ab6881649160 (diff) | |
QIfConfiguration: Fix backendSettings ini parsing
Reading QVariantMaps from a ini file using QSettings
is only possible when the binary format is used.
To make the ini human-readable, we use '/' as a
separator in key names and parse the values ourself.
Change-Id: Id9203913052e04eab442903142006a1a57491be2
Reviewed-by: Robert Griebl <robert.griebl@qt.io>
Diffstat (limited to 'src')
| -rw-r--r-- | src/interfaceframework/qifconfiguration.cpp | 20 | ||||
| -rw-r--r-- | src/interfaceframework/qifconfiguration_p.h | 6 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/interfaceframework/qifconfiguration.cpp b/src/interfaceframework/qifconfiguration.cpp index f497ac5b..4215dccc 100644 --- a/src/interfaceframework/qifconfiguration.cpp +++ b/src/interfaceframework/qifconfiguration.cpp @@ -8,7 +8,6 @@ #include "qifqmlconversion_helper.h" #include <QLibraryInfo> -#include <QSettings> #include <QDir> QT_BEGIN_NAMESPACE @@ -58,6 +57,18 @@ QIfAbstractFeature::DiscoveryMode discoveryModeFromString(const QString &modeStr return QIfAbstractFeature::InvalidAutoDiscovery; } +QVariantMap QIfConfigurationManager::readGroup(QSettings *settings, QAnyStringView group) +{ + QVariantMap map; + settings->beginGroup(group); + for (const QString& key : settings->childKeys()) + map.insert(key, settings->value(key)); + for (const QString& group : settings->childGroups()) + map.insert(group, readGroup(settings, group)); + settings->endGroup(); + return map; +} + void QIfConfigurationManager::readInitialSettings(const QString &configPath) { qCDebug(qLcIfConfig) << "Loading initial settings from " << configPath; @@ -68,8 +79,6 @@ void QIfConfigurationManager::readInitialSettings(const QString &configPath) auto settingsObject = new QIfSettingsObject; settings.beginGroup(group); - settingsObject->serviceSettingsSet = settings.contains("serviceSettings"); - settingsObject->serviceSettings = settings.value("serviceSettings").toMap(); settingsObject->simulationFileSet = settings.contains("simulationFile"); settingsObject->simulationFile = settings.value("simulationFile").toString(); settingsObject->simulationDataFileSet = settings.contains("simulationDataFile"); @@ -77,6 +86,11 @@ void QIfConfigurationManager::readInitialSettings(const QString &configPath) settingsObject->preferredBackendsSet = settings.contains("preferredBackends"); settingsObject->preferredBackends = settings.value("preferredBackends").toStringList(); QVariant discoveryModeVariant = settings.value("discoveryMode"); + + if (settings.childGroups().contains("serviceSettings")) { + settingsObject->serviceSettingsSet = true; + settingsObject->serviceSettings = readGroup(&settings, "serviceSettings"); + } settings.endGroup(); if (discoveryModeVariant.isValid()) { diff --git a/src/interfaceframework/qifconfiguration_p.h b/src/interfaceframework/qifconfiguration_p.h index 26e89711..c76da8c3 100644 --- a/src/interfaceframework/qifconfiguration_p.h +++ b/src/interfaceframework/qifconfiguration_p.h @@ -19,6 +19,7 @@ #include "qifproxyserviceobject.h" #include <QtCore/QLoggingCategory> +#include <QtCore/QSettings> #include <private/qobject_p.h> #include <private/qtifglobal_p.h> @@ -40,8 +41,8 @@ public: bool discoveryModeEnvOverride = false; QStringList preferredBackends; bool preferredBackendsSet = false; - bool preferredBackendsEnvOverride; - QIfServiceObject *serviceObject = nullptr; + bool preferredBackendsEnvOverride = false; + QPointer<QIfServiceObject> serviceObject; bool serviceObjectSet = false; QVariantMap serviceSettings; bool serviceSettingsSet = false; @@ -68,6 +69,7 @@ public: bool setPreferredBackends(QIfConfiguration *obj, QIfSettingsObject *so, const QStringList &preferredBackends); bool setServiceObject(QIfSettingsObject *so, QIfServiceObject *serviceObject); + QVariantMap readGroup(QSettings *settings, QAnyStringView group); void parseEnv(const QByteArray &rulesSrc, std::function<void(const QString &, const QString &)> func); QHash<QString, QIfSettingsObject*> m_settingsHash; |
