mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2025-06-12 21:27:44 +02:00
chore: migrate map settings to json string
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
@ -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", "");
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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");
|
||||
|
||||
|
Reference in New Issue
Block a user