diff options
Diffstat (limited to 'src/libs/installer/settingsoperation.cpp')
-rw-r--r-- | src/libs/installer/settingsoperation.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/libs/installer/settingsoperation.cpp b/src/libs/installer/settingsoperation.cpp index c5fe8384c..a74161178 100644 --- a/src/libs/installer/settingsoperation.cpp +++ b/src/libs/installer/settingsoperation.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -46,6 +46,7 @@ SettingsOperation::SettingsOperation(PackageManagerCore *core) : UpdateOperation(core) { setName(QLatin1String("Settings")); + setRequiresUnreplacedVariables(true); } void SettingsOperation::backup() @@ -104,10 +105,17 @@ bool SettingsOperation::performOperation() if (!checkArguments()) return false; - const QString path = argumentKeyValue(QLatin1String("path")); + QString path = argumentKeyValue(QLatin1String("path")); const QString method = argumentKeyValue(QLatin1String("method")); const QString key = argumentKeyValue(QLatin1String("key")); - const QString aValue = argumentKeyValue(QLatin1String("value")); + QString aValue = argumentKeyValue(QLatin1String("value")); + + if (requiresUnreplacedVariables()) { + if (PackageManagerCore *const core = packageManager()) { + path = core->replaceVariables(path); + aValue = core->replaceVariables(aValue); + } + } // use MkdirOperation to get the path so it can remove it with MkdirOperation::undoOperation later KDUpdater::MkdirOperation mkDirOperation; @@ -120,7 +128,7 @@ bool SettingsOperation::performOperation() } setValue(QLatin1String("createddir"), mkDirOperation.value(QLatin1String("createddir"))); - QSettingsWrapper settings(path, QSettingsWrapper::IniFormat); + QSettingsWrapper settings(path, QSettings::IniFormat); if (method == QLatin1String("set")) settings.setValue(key, aValue); else if (method == QLatin1String("remove")) @@ -152,17 +160,28 @@ bool SettingsOperation::undoOperation() { if (!checkArguments()) return false; - const QString path = argumentKeyValue(QLatin1String("path")); + QString path = argumentKeyValue(QLatin1String("path")); const QString method = argumentKeyValue(QLatin1String("method")); const QString key = argumentKeyValue(QLatin1String("key")); - const QString aValue = argumentKeyValue(QLatin1String("value")); + QString aValue = argumentKeyValue(QLatin1String("value")); if (method.startsWith(QLatin1String("remove"))) return true; + if (requiresUnreplacedVariables()) { + if (PackageManagerCore *const core = packageManager()) { + path = core->replaceVariables(path); + aValue = core->replaceVariables(aValue); + // Check is different settings file is wanted to be used. + // Old settings file name should be set to variable <variable_name>_OLD, + // and new path is then read from <variable_name> variable. + variableReplacement(&path); + } + } + bool cleanUp = false; { // kill the scope to kill settings object, else remove file will not work - QSettingsWrapper settings(path, QSettingsWrapper::IniFormat); + QSettingsWrapper settings(path, QSettings::IniFormat); if (method == QLatin1String("set")) { settings.remove(key); } else if (method == QLatin1String("add_array_value")) { |