chore: ensure the setting is saved as string

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2025-06-02 09:29:37 +03:00
parent 492769aea6
commit ca54971499
No known key found for this signature in database
GPG key ID: 55EF5DA53DB36318
5 changed files with 36 additions and 5 deletions

View file

@ -279,4 +279,29 @@ QJsonValue requireIsType<QJsonValue>(const QJsonValue& value, const QString& wha
return value; return value;
} }
QStringList toStringList(const QString& jsonString)
{
QJsonParseError parseError;
QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8(), &parseError);
if (parseError.error != QJsonParseError::NoError || !doc.isArray())
return {};
try {
return ensureIsArrayOf<QString>(doc.array(), "");
} catch (Json::JsonException& e) {
return {};
}
}
QString fromStringList(const QStringList& list)
{
QJsonArray array;
for (const QString& str : list) {
array.append(str);
}
QJsonDocument doc(toJsonArray(list));
return QString::fromUtf8(doc.toJson(QJsonDocument::Compact));
}
} // namespace Json } // namespace Json

View file

@ -99,7 +99,7 @@ template <typename T>
QJsonArray toJsonArray(const QList<T>& container) QJsonArray toJsonArray(const QList<T>& container)
{ {
QJsonArray array; QJsonArray array;
for (const T item : container) { for (const T& item : container) {
array.append(toJson<T>(item)); array.append(toJson<T>(item));
} }
return array; return array;
@ -278,5 +278,9 @@ JSON_HELPERFUNCTIONS(Variant, QVariant)
#undef JSON_HELPERFUNCTIONS #undef JSON_HELPERFUNCTIONS
// helper functions for settings
QStringList toStringList(const QString& jsonString);
QString fromStringList(const QStringList& list);
} // namespace Json } // namespace Json
using JSONValidationError = Json::JsonException; using JSONValidationError = Json::JsonException;

View file

@ -252,7 +252,7 @@ void MinecraftInstance::loadSpecificSettings()
// Join server on launch, this does not have a global override // Join server on launch, this does not have a global override
m_settings->registerSetting("OverrideModDownloadLoaders", false); m_settings->registerSetting("OverrideModDownloadLoaders", false);
m_settings->registerSetting("ModDownloadLoaders", QStringList()); m_settings->registerSetting("ModDownloadLoaders", "[]");
qDebug() << "Instance-type specific settings were loaded!"; qDebug() << "Instance-type specific settings were loaded!";

View file

@ -39,6 +39,7 @@
#include "Application.h" #include "Application.h"
#include "BuildConfig.h" #include "BuildConfig.h"
#include "Json.h"
#include "minecraft/PackProfile.h" #include "minecraft/PackProfile.h"
#include "minecraft/WorldList.h" #include "minecraft/WorldList.h"
#include "minecraft/auth/AccountList.h" #include "minecraft/auth/AccountList.h"
@ -242,7 +243,7 @@ void MinecraftSettingsWidget::loadSettings()
m_ui->liteLoader->blockSignals(true); m_ui->liteLoader->blockSignals(true);
auto instLoaders = m_instance->getPackProfile()->getSupportedModLoaders().value(); auto instLoaders = m_instance->getPackProfile()->getSupportedModLoaders().value();
m_ui->loaderGroup->setChecked(settings->get("OverrideModDownloadLoaders").toBool()); m_ui->loaderGroup->setChecked(settings->get("OverrideModDownloadLoaders").toBool());
auto loaders = settings->get("ModDownloadLoaders").toStringList(); auto loaders = Json::toStringList(settings->get("ModDownloadLoaders").toString());
if (loaders.isEmpty()) { if (loaders.isEmpty()) {
m_ui->neoForge->setChecked(instLoaders & ModPlatform::NeoForge); m_ui->neoForge->setChecked(instLoaders & ModPlatform::NeoForge);
m_ui->forge->setChecked(instLoaders & ModPlatform::Forge); m_ui->forge->setChecked(instLoaders & ModPlatform::Forge);
@ -499,5 +500,5 @@ void MinecraftSettingsWidget::selectedLoadersChanged()
loaders << getModLoaderAsString(ModPlatform::Quilt); loaders << getModLoaderAsString(ModPlatform::Quilt);
if (m_ui->liteLoader->isChecked()) if (m_ui->liteLoader->isChecked())
loaders << getModLoaderAsString(ModPlatform::LiteLoader); loaders << getModLoaderAsString(ModPlatform::LiteLoader);
m_instance->settings()->set("ModDownloadLoaders", loaders); m_instance->settings()->set("ModDownloadLoaders", Json::fromStringList(loaders));
} }

View file

@ -40,6 +40,7 @@
#include <algorithm> #include <algorithm>
#include <list> #include <list>
#include "BaseVersionList.h" #include "BaseVersionList.h"
#include "Json.h"
#include "Version.h" #include "Version.h"
#include "meta/Index.h" #include "meta/Index.h"
#include "modplatform/ModIndex.h" #include "modplatform/ModIndex.h"
@ -220,7 +221,7 @@ void ModFilterWidget::prepareBasicFilter()
m_filter->side = ""; // or "both" m_filter->side = ""; // or "both"
ModPlatform::ModLoaderTypes loaders; ModPlatform::ModLoaderTypes loaders;
if (m_instance->settings()->get("OverrideModDownloadLoaders").toBool()) { if (m_instance->settings()->get("OverrideModDownloadLoaders").toBool()) {
for (auto loader : m_instance->settings()->get("ModDownloadLoaders").toStringList()) { for (auto loader : Json::toStringList(m_instance->settings()->get("ModDownloadLoaders").toString())) {
loaders |= ModPlatform::getModLoaderFromString(loader); loaders |= ModPlatform::getModLoaderFromString(loader);
} }
} else { } else {