| 27 | #include <memory> |
| 28 | |
| 29 | void Technic::TechnicPackProcessor::run(SettingsObjectPtr globalSettings, const QString &instName, const QString &instIcon, const QString &stagingPath, const QString &minecraftVersion, const bool isSolder) |
| 30 | { |
| 31 | QString minecraftPath = FS::PathCombine(stagingPath, ".minecraft"); |
| 32 | QString configPath = FS::PathCombine(stagingPath, "instance.cfg"); |
| 33 | auto instanceSettings = std::make_shared<INISettingsObject>(configPath); |
| 34 | MinecraftInstance instance(globalSettings, instanceSettings, stagingPath); |
| 35 | |
| 36 | instance.setName(instName); |
| 37 | |
| 38 | if (instIcon != "default") |
| 39 | { |
| 40 | instance.setIconKey(instIcon); |
| 41 | } |
| 42 | |
| 43 | auto components = instance.getPackProfile(); |
| 44 | components->buildingFromScratch(); |
| 45 | |
| 46 | QByteArray data; |
| 47 | |
| 48 | QString modpackJar = FS::PathCombine(minecraftPath, "bin", "modpack.jar"); |
| 49 | QString versionJson = FS::PathCombine(minecraftPath, "bin", "version.json"); |
| 50 | QString fmlMinecraftVersion; |
| 51 | if (QFile::exists(modpackJar)) |
| 52 | { |
| 53 | QuaZip zipFile(modpackJar); |
| 54 | if (!zipFile.open(QuaZip::mdUnzip)) |
| 55 | { |
| 56 | emit failed(tr("Unable to open \"bin/modpack.jar\" file!")); |
| 57 | return; |
| 58 | } |
| 59 | QuaZipDir zipFileRoot(&zipFile, "/"); |
| 60 | if (zipFileRoot.exists("/version.json")) |
| 61 | { |
| 62 | if (zipFileRoot.exists("/fmlversion.properties")) |
| 63 | { |
| 64 | zipFile.setCurrentFile("fmlversion.properties"); |
| 65 | QuaZipFile file(&zipFile); |
| 66 | if (!file.open(QIODevice::ReadOnly)) |
| 67 | { |
| 68 | emit failed(tr("Unable to open \"fmlversion.properties\"!")); |
| 69 | return; |
| 70 | } |
| 71 | QByteArray fmlVersionData = file.readAll(); |
| 72 | file.close(); |
| 73 | INIFile iniFile; |
| 74 | iniFile.loadFile(fmlVersionData); |
| 75 | // If not present, this evaluates to a null string |
| 76 | fmlMinecraftVersion = iniFile["fmlbuild.mcversion"].toString(); |
| 77 | } |
| 78 | zipFile.setCurrentFile("version.json", QuaZip::csSensitive); |
| 79 | QuaZipFile file(&zipFile); |
| 80 | if (!file.open(QIODevice::ReadOnly)) |
| 81 | { |
| 82 | emit failed(tr("Unable to open \"version.json\"!")); |
| 83 | return; |
| 84 | } |
| 85 | data = file.readAll(); |
| 86 | file.close(); |
no test coverage detected