Merge pull request #1192 from Trial97/pre-lauch
This commit is contained in:
		| @@ -50,7 +50,7 @@ INIFile::INIFile() {} | |||||||
| bool INIFile::saveFile(QString fileName) | bool INIFile::saveFile(QString fileName) | ||||||
| { | { | ||||||
|     if (!contains("ConfigVersion")) |     if (!contains("ConfigVersion")) | ||||||
|         insert("ConfigVersion", "1.1"); |         insert("ConfigVersion", "1.2"); | ||||||
|     QSettings _settings_obj{ fileName, QSettings::Format::IniFormat }; |     QSettings _settings_obj{ fileName, QSettings::Format::IniFormat }; | ||||||
|     _settings_obj.setFallbacksEnabled(false); |     _settings_obj.setFallbacksEnabled(false); | ||||||
|  |  | ||||||
| @@ -97,6 +97,20 @@ QString unescape(QString orig) | |||||||
|     } |     } | ||||||
|     return out; |     return out; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | QString unquote(QString str) | ||||||
|  | { | ||||||
|  |     if ((str.contains(QChar(';')) || str.contains(QChar('=')) || str.contains(QChar(','))) && str.endsWith("\"") && str.startsWith("\"")) { | ||||||
|  | #if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) | ||||||
|  |         str = str.remove(0, 1); | ||||||
|  |         str = str.remove(str.size() - 1, 1); | ||||||
|  | #else | ||||||
|  |         str = str.removeFirst().removeLast(); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     return str; | ||||||
|  | } | ||||||
|  |  | ||||||
| bool parseOldFileFormat(QIODevice& device, QSettings::SettingsMap& map) | bool parseOldFileFormat(QIODevice& device, QSettings::SettingsMap& map) | ||||||
| { | { | ||||||
|     QTextStream in(device.readAll()); |     QTextStream in(device.readAll()); | ||||||
| @@ -124,7 +138,7 @@ bool parseOldFileFormat(QIODevice& device, QSettings::SettingsMap& map) | |||||||
|         QString key = line.left(eqPos).trimmed(); |         QString key = line.left(eqPos).trimmed(); | ||||||
|         QString valueStr = line.right(line.length() - eqPos - 1).trimmed(); |         QString valueStr = line.right(line.length() - eqPos - 1).trimmed(); | ||||||
|  |  | ||||||
|         valueStr = unescape(valueStr); |         valueStr = unquote(unescape(valueStr)); | ||||||
|  |  | ||||||
|         QVariant value(valueStr); |         QVariant value(valueStr); | ||||||
|         map.insert(key, value); |         map.insert(key, value); | ||||||
| @@ -154,7 +168,17 @@ bool INIFile::loadFile(QString fileName) | |||||||
|         file.close(); |         file.close(); | ||||||
|         for (auto&& key : map.keys()) |         for (auto&& key : map.keys()) | ||||||
|             insert(key, map.value(key)); |             insert(key, map.value(key)); | ||||||
|         insert("ConfigVersion", "1.1"); |         insert("ConfigVersion", "1.2"); | ||||||
|  |     } else if (_settings_obj.value("ConfigVersion").toString() == "1.1") { | ||||||
|  |         for (auto&& key : _settings_obj.allKeys()) { | ||||||
|  |             if (auto valueStr = _settings_obj.value(key).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)); | ||||||
|  |         } | ||||||
|  |         insert("ConfigVersion", "1.2"); | ||||||
|     } else |     } else | ||||||
|         for (auto&& key : _settings_obj.allKeys()) |         for (auto&& key : _settings_obj.allKeys()) | ||||||
|             insert(key, _settings_obj.value(key)); |             insert(key, _settings_obj.value(key)); | ||||||
|   | |||||||
| @@ -2,7 +2,10 @@ | |||||||
|  |  | ||||||
| #include <settings/INIFile.h> | #include <settings/INIFile.h> | ||||||
| #include <QList> | #include <QList> | ||||||
|  | #include <QSettings> | ||||||
|  | #include <QTemporaryFile> | ||||||
| #include <QVariant> | #include <QVariant> | ||||||
|  | #include "FileSystem.h" | ||||||
|  |  | ||||||
| #include <QVariantUtils.h> | #include <QVariantUtils.h> | ||||||
|  |  | ||||||
| @@ -72,32 +75,120 @@ class IniFileTest : public QObject { | |||||||
|         QCOMPARE(out_list_numbers, list_numbers); |         QCOMPARE(out_list_numbers, list_numbers); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void test_SaveAleardyExistingFile() |     void test_SaveAlreadyExistingFile() | ||||||
|     { |     { | ||||||
|         QString fileName = "test_SaveAleardyExistingFile.ini"; |  | ||||||
|         QString fileContent = R"(InstanceType=OneSix |         QString fileContent = R"(InstanceType=OneSix | ||||||
| iconKey=vanillia_icon | iconKey=vanillia_icon | ||||||
| name=Minecraft Vanillia | name=Minecraft Vanillia | ||||||
| OverrideCommands=true | OverrideCommands=true | ||||||
| PreLaunchCommand="$INST_JAVA" -jar packwiz-installer-bootstrap.jar link | PreLaunchCommand="$INST_JAVA" -jar packwiz-installer-bootstrap.jar link | ||||||
| )"; | Wrapperommand=)"; | ||||||
|  |         fileContent += "\""; | ||||||
|  |         fileContent += +R"(\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link =)"; | ||||||
|  |         fileContent += "\"\n"; | ||||||
|  | #if defined(Q_OS_WIN) | ||||||
|  |         QString fileName = "test_SaveAlreadyExistingFile.ini"; | ||||||
|         QFile file(fileName); |         QFile file(fileName); | ||||||
|  |         QCOMPARE(file.open(QFile::WriteOnly | QFile::Text), true); | ||||||
|         if (file.open(QFile::WriteOnly | QFile::Text)) { | #else | ||||||
|             QTextStream stream(&file); |         QTemporaryFile file; | ||||||
|             stream << fileContent; |         QCOMPARE(file.open(), true); | ||||||
|             file.close(); |         QCOMPARE(file.fileName().isEmpty(), false); | ||||||
|         } |         QString fileName = file.fileName(); | ||||||
|  | #endif | ||||||
|  |         QTextStream stream(&file); | ||||||
|  |         stream << fileContent; | ||||||
|  |         file.close(); | ||||||
|  |  | ||||||
|         // load |         // load | ||||||
|         INIFile f1; |         INIFile f1; | ||||||
|         f1.loadFile(fileName); |         f1.loadFile(fileName); | ||||||
|         QCOMPARE(f1.get("PreLaunchCommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link"); |         QCOMPARE(f1.get("PreLaunchCommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link"); | ||||||
|  |         QCOMPARE(f1.get("Wrapperommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link ="); | ||||||
|         f1.saveFile(fileName); |         f1.saveFile(fileName); | ||||||
|         INIFile f2; |         INIFile f2; | ||||||
|         f2.loadFile(fileName); |         f2.loadFile(fileName); | ||||||
|         QCOMPARE(f2.get("PreLaunchCommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link"); |         QCOMPARE(f2.get("PreLaunchCommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link"); | ||||||
|         QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.1"); |         QCOMPARE(f2.get("Wrapperommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link ="); | ||||||
|  |         QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.2"); | ||||||
|  | #if defined(Q_OS_WIN) | ||||||
|  |         FS::deletePath(fileName); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     void test_SaveAlreadyExistingFileWithSpecialChars() | ||||||
|  |     { | ||||||
|  | #if defined(Q_OS_WIN) | ||||||
|  |         QString fileName = "test_SaveAlreadyExistingFileWithSpecialChars.ini"; | ||||||
|  | #else | ||||||
|  |         QTemporaryFile file; | ||||||
|  |         QCOMPARE(file.open(), true); | ||||||
|  |         QCOMPARE(file.fileName().isEmpty(), false); | ||||||
|  |         QString fileName = file.fileName(); | ||||||
|  |         file.close(); | ||||||
|  | #endif | ||||||
|  |         QSettings settings{ fileName, QSettings::Format::IniFormat }; | ||||||
|  |         settings.setFallbacksEnabled(false); | ||||||
|  |  | ||||||
|  |         settings.setValue("simple", "value1"); | ||||||
|  |         settings.setValue("withQuotes", R"("value2" with quotes)"); | ||||||
|  |         settings.setValue("withSpecialCharacters", "env mesa=true"); | ||||||
|  |         settings.setValue("withSpecialCharacters2", "1,2,3,4"); | ||||||
|  |         settings.setValue("withSpecialCharacters2", "1;2;3;4"); | ||||||
|  |         settings.setValue("withAll", "val=\"$INST_JAVA\" -jar; ls "); | ||||||
|  |  | ||||||
|  |         settings.sync(); | ||||||
|  |  | ||||||
|  |         QCOMPARE(settings.status(), QSettings::Status::NoError); | ||||||
|  |  | ||||||
|  |         // load | ||||||
|  |         INIFile f1; | ||||||
|  |         f1.loadFile(fileName); | ||||||
|  |         for (auto key : settings.allKeys()) | ||||||
|  |             QCOMPARE(f1.get(key, "NOT SET").toString(), settings.value(key).toString()); | ||||||
|  |         f1.saveFile(fileName); | ||||||
|  |         INIFile f2; | ||||||
|  |         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"); | ||||||
|  | #if defined(Q_OS_WIN) | ||||||
|  |         FS::deletePath(fileName); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     void test_SaveAlreadyExistingFileWithSpecialCharsV1() | ||||||
|  |     { | ||||||
|  |         QString fileContent = R"(InstanceType=OneSix | ||||||
|  | ConfigVersion=1.1 | ||||||
|  | iconKey=vanillia_icon | ||||||
|  | name=Minecraft Vanillia | ||||||
|  | OverrideCommands=true | ||||||
|  | PreLaunchCommand=)"; | ||||||
|  |         fileContent += "\"\\\"env mesa=true\\\"\"\n"; | ||||||
|  |  | ||||||
|  | #if defined(Q_OS_WIN) | ||||||
|  |         QString fileName = "test_SaveAlreadyExistingFileWithSpecialCharsV1.ini"; | ||||||
|  |         QFile file(fileName); | ||||||
|  |         QCOMPARE(file.open(QFile::WriteOnly | QFile::Text), true); | ||||||
|  | #else | ||||||
|  |         QTemporaryFile file; | ||||||
|  |         QCOMPARE(file.open(), true); | ||||||
|  |         QCOMPARE(file.fileName().isEmpty(), false); | ||||||
|  |         QString fileName = file.fileName(); | ||||||
|  | #endif | ||||||
|  |         QTextStream stream(&file); | ||||||
|  |         stream << fileContent; | ||||||
|  |         file.close(); | ||||||
|  |  | ||||||
|  |         // load | ||||||
|  |         INIFile f1; | ||||||
|  |         f1.loadFile(fileName); | ||||||
|  |         QCOMPARE(f1.get("PreLaunchCommand", "NOT SET").toString(), "env mesa=true"); | ||||||
|  |         QCOMPARE(f1.get("ConfigVersion", "NOT SET").toString(), "1.2"); | ||||||
|  | #if defined(Q_OS_WIN) | ||||||
|  |         FS::deletePath(fileName); | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sefa Eyeoglu
					Sefa Eyeoglu