From 7e174f53af5959c04109a79e2d6e3b6e3bbd5feb Mon Sep 17 00:00:00 2001 From: Trial97 Date: Tue, 20 May 2025 22:59:18 +0300 Subject: [PATCH] chore: add migration for old QByteArray to base64 Signed-off-by: Trial97 --- .../minecraft/mod/ResourceFolderModel.cpp | 1 - launcher/settings/INIFile.cpp | 40 ++++++++++++++----- tests/INIFile_test.cpp | 6 +-- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/launcher/minecraft/mod/ResourceFolderModel.cpp b/launcher/minecraft/mod/ResourceFolderModel.cpp index 21093066d..2956570af 100644 --- a/launcher/minecraft/mod/ResourceFolderModel.cpp +++ b/launcher/minecraft/mod/ResourceFolderModel.cpp @@ -1,5 +1,4 @@ #include "ResourceFolderModel.h" -#include #include #include diff --git a/launcher/settings/INIFile.cpp b/launcher/settings/INIFile.cpp index 2c7620e65..530b4590a 100644 --- a/launcher/settings/INIFile.cpp +++ b/launcher/settings/INIFile.cpp @@ -50,7 +50,7 @@ INIFile::INIFile() {} bool INIFile::saveFile(QString fileName) { if (!contains("ConfigVersion")) - insert("ConfigVersion", "1.2"); + insert("ConfigVersion", "1.3"); QSettings _settings_obj{ fileName, QSettings::Format::IniFormat }; _settings_obj.setFallbacksEnabled(false); _settings_obj.clear(); @@ -149,6 +149,14 @@ bool parseOldFileFormat(QIODevice& device, QSettings::SettingsMap& map) return true; } +QVariant migrateQByteArrayToBase64(QString key, QVariant value) +{ + if (key.startsWith("WideBarVisibility_") || (key.startsWith("UI/") && key.endsWith("_Page/Columns"))) { + return value.toByteArray().toBase64(); + } + return value; +} + bool INIFile::loadFile(QString fileName) { QSettings _settings_obj{ fileName, QSettings::Format::IniFormat }; @@ -168,22 +176,34 @@ bool INIFile::loadFile(QString fileName) QSettings::SettingsMap map; parseOldFileFormat(file, map); file.close(); - for (auto&& key : map.keys()) - insert(key, map.value(key)); - insert("ConfigVersion", "1.2"); + for (auto&& key : map.keys()) { + auto value = migrateQByteArrayToBase64(key, map.value(key)); + insert(key, value); + } + insert("ConfigVersion", "1.3"); } else if (_settings_obj.value("ConfigVersion").toString() == "1.1") { for (auto&& key : _settings_obj.allKeys()) { - if (auto valueStr = _settings_obj.value(key).toString(); + auto value = migrateQByteArrayToBase64(key, _settings_obj.value(key)); + if (auto valueStr = value.toString(); (valueStr.contains(QChar(';')) || valueStr.contains(QChar('=')) || valueStr.contains(QChar(','))) && valueStr.endsWith("\"") && valueStr.startsWith("\"")) { insert(key, unquote(valueStr)); - } else - insert(key, _settings_obj.value(key)); + } else { + insert(key, value); + } } - insert("ConfigVersion", "1.2"); - } else - for (auto&& key : _settings_obj.allKeys()) + insert("ConfigVersion", "1.3"); + } else if (_settings_obj.value("ConfigVersion").toString() == "1.2") { + for (auto&& key : _settings_obj.allKeys()) { + auto value = migrateQByteArrayToBase64(key, _settings_obj.value(key)); + insert(key, value); + } + insert("ConfigVersion", "1.3"); + } else { + for (auto&& key : _settings_obj.allKeys()) { insert(key, _settings_obj.value(key)); + } + } return true; } diff --git a/tests/INIFile_test.cpp b/tests/INIFile_test.cpp index 95730e244..559600212 100644 --- a/tests/INIFile_test.cpp +++ b/tests/INIFile_test.cpp @@ -110,7 +110,7 @@ Wrapperommand=)"; f2.loadFile(fileName); QCOMPARE(f2.get("PreLaunchCommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link"); QCOMPARE(f2.get("Wrapperommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link ="); - QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.2"); + QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.3"); #if defined(Q_OS_WIN) FS::deletePath(fileName); #endif @@ -151,7 +151,7 @@ Wrapperommand=)"; f2.loadFile(fileName); for (auto key : settings.allKeys()) QCOMPARE(f2.get(key, "NOT SET").toString(), settings.value(key).toString()); - QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.2"); + QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.3"); #if defined(Q_OS_WIN) FS::deletePath(fileName); #endif @@ -185,7 +185,7 @@ PreLaunchCommand=)"; INIFile f1; f1.loadFile(fileName); QCOMPARE(f1.get("PreLaunchCommand", "NOT SET").toString(), "env mesa=true"); - QCOMPARE(f1.get("ConfigVersion", "NOT SET").toString(), "1.2"); + QCOMPARE(f1.get("ConfigVersion", "NOT SET").toString(), "1.3"); #if defined(Q_OS_WIN) FS::deletePath(fileName); #endif