chore: migrate map settings to json string

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97
2025-05-21 18:17:08 +03:00
parent 89be378ef6
commit 8c710fb8de
8 changed files with 54 additions and 22 deletions

View File

@ -816,7 +816,7 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_settings->registerSetting("TPDownloadGeometry", "");
m_settings->registerSetting("ShaderDownloadGeometry", "");
m_settings->registerSetting("UI/FolderResourceColumnVisibility", QVariantMap{});
m_settings->registerSetting("UI/FolderResourceColumnVisibility", "{}");
// HACK: This code feels so stupid is there a less stupid way of doing this?
{
@ -855,7 +855,7 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_settings->registerSetting("CloseAfterLaunch", false);
m_settings->registerSetting("QuitAfterGameStop", false);
m_settings->registerSetting("Env", QVariant(QMap<QString, QVariant>()));
m_settings->registerSetting("Env", "{}");
// Custom Microsoft Authentication Client ID
m_settings->registerSetting("MSAClientIDOverride", "");

View File

@ -44,6 +44,7 @@
#include <QJsonObject>
#include "Application.h"
#include "Json.h"
#include "settings/INISettingsObject.h"
#include "settings/OverrideSetting.h"
#include "settings/Setting.h"
@ -202,25 +203,25 @@ bool BaseInstance::shouldStopOnConsoleOverflow() const
QStringList BaseInstance::getLinkedInstances() const
{
return m_settings->get("linkedInstances").toStringList();
auto setting = m_settings->get("linkedInstances").toString();
return Json::toStringList(setting);
}
void BaseInstance::setLinkedInstances(const QStringList& list)
{
auto linkedInstances = m_settings->get("linkedInstances").toStringList();
m_settings->set("linkedInstances", list);
m_settings->set("linkedInstances", Json::fromStringList(list));
}
void BaseInstance::addLinkedInstanceId(const QString& id)
{
auto linkedInstances = m_settings->get("linkedInstances").toStringList();
auto linkedInstances = getLinkedInstances();
linkedInstances.append(id);
setLinkedInstances(linkedInstances);
}
bool BaseInstance::removeLinkedInstanceId(const QString& id)
{
auto linkedInstances = m_settings->get("linkedInstances").toStringList();
auto linkedInstances = getLinkedInstances();
int numRemoved = linkedInstances.removeAll(id);
setLinkedInstances(linkedInstances);
return numRemoved > 0;
@ -228,7 +229,7 @@ bool BaseInstance::removeLinkedInstanceId(const QString& id)
bool BaseInstance::isLinkedToInstanceId(const QString& id) const
{
auto linkedInstances = m_settings->get("linkedInstances").toStringList();
auto linkedInstances = getLinkedInstances();
return linkedInstances.contains(id);
}

View File

@ -304,4 +304,23 @@ QString fromStringList(const QStringList& list)
return QString::fromUtf8(doc.toJson(QJsonDocument::Compact));
}
QVariantMap toMap(const QString& jsonString)
{
QJsonParseError parseError;
QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8(), &parseError);
if (parseError.error != QJsonParseError::NoError || !doc.isObject())
return {};
QJsonObject obj = doc.object();
return obj.toVariantMap();
}
QString fromMap(const QVariantMap& map)
{
QJsonObject obj = QJsonObject::fromVariantMap(map);
QJsonDocument doc(obj);
return QString::fromUtf8(doc.toJson(QJsonDocument::Compact));
}
} // namespace Json

View File

@ -282,5 +282,8 @@ JSON_HELPERFUNCTIONS(Variant, QVariant)
QStringList toStringList(const QString& jsonString);
QString fromStringList(const QStringList& list);
QVariantMap toMap(const QString& jsonString);
QString fromMap(const QVariantMap& map);
} // namespace Json
using JSONValidationError = Json::JsonException;

View File

@ -38,6 +38,7 @@
#include "MinecraftInstance.h"
#include "Application.h"
#include "BuildConfig.h"
#include "Json.h"
#include "QObjectPtr.h"
#include "minecraft/launch/AutoInstallJava.h"
#include "minecraft/launch/CreateGameFolders.h"
@ -232,7 +233,7 @@ void MinecraftInstance::loadSpecificSettings()
m_settings->registerOverride(global_settings->getSetting("Env"), envSetting);
m_settings->registerSetting("UI/ColumnsOverride", false);
m_settings->registerSetting("UI/FolderResourceColumnVisibility", QVariantMap{});
m_settings->registerSetting("UI/FolderResourceColumnVisibility", "{}");
m_settings->set("InstanceType", "OneSix");
}
@ -623,7 +624,8 @@ QProcessEnvironment MinecraftInstance::createEnvironment()
}
// custom env
auto insertEnv = [&env](QMap<QString, QVariant> envMap) {
auto insertEnv = [&env](QString value) {
auto envMap = Json::toMap(value);
if (envMap.isEmpty())
return;
@ -634,9 +636,9 @@ QProcessEnvironment MinecraftInstance::createEnvironment()
bool overrideEnv = settings()->get("OverrideEnv").toBool();
if (!overrideEnv)
insertEnv(APPLICATION->settings()->get("Env").toMap());
insertEnv(APPLICATION->settings()->get("Env").toString());
else
insertEnv(settings()->get("Env").toMap());
insertEnv(settings()->get("Env").toString());
return env;
}

View File

@ -597,14 +597,14 @@ void ResourceFolderModel::saveColumns(QTreeView* tree)
if (!settings->get("UI/ColumnsOverride").toBool()) {
settings = APPLICATION->settings();
}
auto visibility = settings->get("UI/FolderResourceColumnVisibility").toMap();
auto visibility = Json::toMap(settings->get("UI/FolderResourceColumnVisibility").toString());
for (auto i = 0; i < m_column_names.size(); ++i) {
if (m_columnsHideable[i]) {
auto name = m_column_names[i];
visibility[name] = !tree->isColumnHidden(i);
}
}
settings->set("UI/FolderResourceColumnVisibility", visibility);
settings->set("UI/FolderResourceColumnVisibility", Json::fromMap(visibility));
}
void ResourceFolderModel::loadColumns(QTreeView* tree)
@ -615,7 +615,7 @@ void ResourceFolderModel::loadColumns(QTreeView* tree)
tree->header()->restoreState(QByteArray::fromBase64(setting->get().toString().toUtf8()));
auto setVisible = [this, tree](QVariant value) {
auto visibility = value.toMap();
auto visibility = Json::toMap(value.toString());
for (auto i = 0; i < m_column_names.size(); ++i) {
if (m_columnsHideable[i]) {
auto name = m_column_names[i];
@ -630,13 +630,13 @@ void ResourceFolderModel::loadColumns(QTreeView* tree)
settings = APPLICATION->settings();
}
auto visibility = settings->getSetting("UI/FolderResourceColumnVisibility");
setVisible(visibility->get().toMap());
setVisible(visibility->get());
// allways connect the signal in case the setting is toggled on and off
auto gSetting = APPLICATION->settings()->getOrRegisterSetting("UI/FolderResourceColumnVisibility");
connect(gSetting.get(), &Setting::SettingChanged, tree, [this, setVisible](const Setting&, QVariant value) {
if (!m_instance->settings()->get("UI/ColumnsOverride").toBool()) {
setVisible(value.toMap());
setVisible(value);
}
});
}

View File

@ -44,6 +44,7 @@
#include <QTextStream>
#include <QSettings>
#include "Json.h"
INIFile::INIFile() {}
@ -151,16 +152,22 @@ bool parseOldFileFormat(QIODevice& device, QSettings::SettingsMap& map)
QVariant migrateQByteArrayToBase64(QString key, QVariant value)
{
if (key.startsWith("WideBarVisibility_") || (key.startsWith("UI/") && key.endsWith("_Page/Columns"))) {
return QString::fromUtf8(value.toByteArray().toBase64());
}
static const QStringList otherByteArrays = { "MainWindowState", "MainWindowGeometry", "ConsoleWindowState",
"ConsoleWindowGeometry", "PagedGeometry", "NewInstanceGeometry",
"ModDownloadGeometry", "RPDownloadGeometry", "TPDownloadGeometry",
"ShaderDownloadGeometry" };
if (key.startsWith("WideBarVisibility_") || (key.startsWith("UI/") && key.endsWith("_Page/Columns"))) {
return QString::fromUtf8(value.toByteArray().toBase64());
}
if (otherByteArrays.contains(key)) {
return QString::fromUtf8(value.toByteArray());
}
if (key == "linkedInstances") {
return Json::fromStringList(value.toStringList());
}
if (key == "Env") {
return Json::fromMap(value.toMap());
}
return value;
}

View File

@ -180,7 +180,7 @@ void MinecraftSettingsWidget::loadSettings()
// Environment variables
m_ui->environmentVariables->initialize(m_instance != nullptr, m_instance == nullptr || settings->get("OverrideEnv").toBool(),
settings->get("Env").toMap());
Json::toMap(settings->get("Env").toString()));
// Legacy Tweaks
m_ui->legacySettingsGroupBox->setChecked(m_instance == nullptr || settings->get("OverrideLegacySettings").toBool());
@ -342,7 +342,7 @@ void MinecraftSettingsWidget::saveSettings()
settings->set("OverrideEnv", env);
if (env)
settings->set("Env", m_ui->environmentVariables->value());
settings->set("Env", Json::fromMap(m_ui->environmentVariables->value()));
else
settings->reset("Env");