diff options
author | flow <flowlnlnln@gmail.com> | 2023-01-13 16:49:21 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2023-01-13 16:49:21 -0300 |
commit | 9407596b12df8cc45ddc53d3c08e495a2674199c (patch) | |
tree | b7ce3f507de8945aa7e42a64c15d66b3bff05e2a /launcher | |
parent | c294c2d1df57c3d599fdea65bab9bb97b1fd699f (diff) | |
download | PrismLauncher-9407596b12df8cc45ddc53d3c08e495a2674199c.tar.gz PrismLauncher-9407596b12df8cc45ddc53d3c08e495a2674199c.tar.bz2 PrismLauncher-9407596b12df8cc45ddc53d3c08e495a2674199c.zip |
fix(ModUpdater): fail mods individually when there's errors in the JSON
Prevents a single problematic mod from invalidating all the API
response.
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher')
-rw-r--r-- | launcher/modplatform/EnsureMetadataTask.cpp | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/launcher/modplatform/EnsureMetadataTask.cpp b/launcher/modplatform/EnsureMetadataTask.cpp index fb451938..d9523052 100644 --- a/launcher/modplatform/EnsureMetadataTask.cpp +++ b/launcher/modplatform/EnsureMetadataTask.cpp @@ -289,43 +289,53 @@ Task::Ptr EnsureMetadataTask::modrinthProjectsTask() return; } + QJsonArray entries; + try { - QJsonArray entries; if (addonIds.size() == 1) entries = { doc.object() }; else entries = Json::requireArray(doc); + } catch (Json::JsonException& e) { + qDebug() << e.cause(); + qDebug() << doc; + } - for (auto entry : entries) { + for (auto entry : entries) { + ModPlatform::IndexedPack pack; + + try { auto entry_obj = Json::requireObject(entry); - ModPlatform::IndexedPack pack; Modrinth::loadIndexedPack(pack, entry_obj); + } catch (Json::JsonException& e) { + qDebug() << e.cause(); + qDebug() << doc; - auto hash = addonIds.find(pack.addonId.toString()).value(); + // Skip this entry, since it has problems + continue; + } - auto mod_iter = m_mods.find(hash); - if (mod_iter == m_mods.end()) { - qWarning() << "Invalid project id from the API response."; - continue; - } + auto hash = addonIds.find(pack.addonId.toString()).value(); - auto* mod = mod_iter.value(); + auto mod_iter = m_mods.find(hash); + if (mod_iter == m_mods.end()) { + qWarning() << "Invalid project id from the API response."; + continue; + } - try { - setStatus(tr("Parsing API response from Modrinth for '%1'...").arg(mod->name())); + auto* mod = mod_iter.value(); - modrinthCallback(pack, m_temp_versions.find(hash).value(), mod); - } catch (Json::JsonException& e) { - qDebug() << e.cause(); - qDebug() << entries; + try { + setStatus(tr("Parsing API response from Modrinth for '%1'...").arg(mod->name())); - emitFail(mod); - } + modrinthCallback(pack, m_temp_versions.find(hash).value(), mod); + } catch (Json::JsonException& e) { + qDebug() << e.cause(); + qDebug() << entries; + + emitFail(mod); } - } catch (Json::JsonException& e) { - qDebug() << e.cause(); - qDebug() << doc; } }); |