summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@qt.io>2022-11-24 16:50:31 +0100
committerDominik Holland <dominik.holland@qt.io>2022-12-07 11:29:19 +0100
commit5085f5f1ec3c194afec2aef77a6519bc151bcccd (patch)
treec2573add38cbdba49f129a74fe3c87f77569613a /src
parent5bdda53b86fddfebc322c4b7fe50ab6881649160 (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.cpp20
-rw-r--r--src/interfaceframework/qifconfiguration_p.h6
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;