hyperion.ng/libsrc/hyperion/SettingsManager.cpp
LordGrey ecceb4e7ae
Refactor Settings DB and Handling (#1786)
* Refactor config API

* Corrections

* Test Qt 6.8

* Revert "Test Qt 6.8"

This reverts commit eceebec49ecf1a3eda281a0630a9a7577b44ef0a.

* Corrections 2

* Update Changelog

* Add configFilter element for getconfig call

* Do not create errors for DB updates when in read-only mode

* Have configuration migration and validation before Hyperion starts

* Correct Tests

* Corrections

* Add migration items

* Correct windows build

* Ensure that first instance as default one exists

* Remove dependency between AuthManager and SSDPHandler

* Correct typos

* Address CodeQL findings

* Replace CamkeSettings by Presets and provide debug scenarios
2024-09-30 22:03:13 +02:00

60 lines
1.6 KiB
C++

// proj
#include <hyperion/SettingsManager.h>
#include <db/SettingsTable.h>
#include <utils/JsonUtils.h>
#include <utils/jsonschema/QJsonFactory.h>
#include <QPair>
using namespace semver;
SettingsManager::SettingsManager(quint8 instance, QObject* parent)
: QObject(parent)
, _log(Logger::getInstance("SETTINGSMGR", "I" + QString::number(instance)))
, _instance(instance)
, _sTable(new SettingsTable(instance, this))
{
_sTable->addMissingDefaults();
}
QJsonDocument SettingsManager::getSetting(settings::type type) const
{
return getSetting(settings::typeToString(type));
}
QJsonDocument SettingsManager::getSetting(const QString& type) const
{
return _sTable->getSettingsRecord(type);
}
QJsonObject SettingsManager::getSettings(const QStringList& filteredTypes ) const
{
return _sTable->getSettings(filteredTypes);
}
QJsonObject SettingsManager::getSettings(const QVariant& instance, const QStringList& filteredTypes ) const
{
return _sTable->getSettings(instance, filteredTypes);
}
QPair<bool, QStringList> SettingsManager::saveSettings(const QJsonObject& config)
{
QStringList errorList;
for (auto &key : config.keys())
{
const QJsonValue configItem = config.value(key);
const QString data = JsonUtils::jsonValueToQString(configItem);
if (_sTable->getSettingsRecordString(key) != data)
{
if (!_sTable->createSettingsRecord(key, data))
{
errorList.append(QString("Failed to save configuration item: %1").arg(key));
return qMakePair (false, errorList);
}
emit settingsChanged(settings::stringToType(key), QJsonDocument::fromVariant(configItem.toVariant()));
}
}
return qMakePair (true, errorList );
}