fix: properly parse mrpacks without the 'env' field

It's optional, so some files may not have it (like most of FO).
This commit is contained in:
flow 2022-06-09 19:53:29 -03:00
parent 309013efb3
commit 46e403b20b
No known key found for this signature in database
GPG Key ID: 8D0F221F0A59F469

View File

@ -582,6 +582,7 @@ void InstanceImportTask::processMultiMC()
emitSucceeded(); emitSucceeded();
} }
// https://docs.modrinth.com/docs/modpacks/format_definition/
void InstanceImportTask::processModrinth() void InstanceImportTask::processModrinth()
{ {
std::vector<Modrinth::File> files; std::vector<Modrinth::File> files;
@ -600,11 +601,13 @@ void InstanceImportTask::processModrinth()
auto jsonFiles = Json::requireIsArrayOf<QJsonObject>(obj, "files", "modrinth.index.json"); auto jsonFiles = Json::requireIsArrayOf<QJsonObject>(obj, "files", "modrinth.index.json");
bool had_optional = false; bool had_optional = false;
for (auto& modInfo : jsonFiles) { for (auto modInfo : jsonFiles) {
Modrinth::File file; Modrinth::File file;
file.path = Json::requireString(modInfo, "path"); file.path = Json::requireString(modInfo, "path");
auto env = Json::ensureObject(modInfo, "env"); auto env = Json::ensureObject(modInfo, "env");
// 'env' field is optional
if (!env.isEmpty()) {
QString support = Json::ensureString(env, "client", "unsupported"); QString support = Json::ensureString(env, "client", "unsupported");
if (support == "unsupported") { if (support == "unsupported") {
continue; continue;
@ -614,13 +617,15 @@ void InstanceImportTask::processModrinth()
had_optional = true; had_optional = true;
auto info = CustomMessageBox::selectable( auto info = CustomMessageBox::selectable(
m_parent, tr("Optional mod detected!"), m_parent, tr("Optional mod detected!"),
tr("One or more mods from this modpack are optional. They will be downloaded, but disabled by default!"), QMessageBox::Information); tr("One or more mods from this modpack are optional. They will be downloaded, but disabled by default!"),
QMessageBox::Information);
info->exec(); info->exec();
} }
if (file.path.endsWith(".jar")) if (file.path.endsWith(".jar"))
file.path += ".disabled"; file.path += ".disabled";
} }
}
QJsonObject hashes = Json::requireObject(modInfo, "hashes"); QJsonObject hashes = Json::requireObject(modInfo, "hashes");
QString hash; QString hash;