aboutsummaryrefslogtreecommitdiff
path: root/launcher/modplatform/EnsureMetadataTask.cpp
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2023-01-13 16:49:21 -0300
committerflow <flowlnlnln@gmail.com>2023-01-13 16:49:21 -0300
commit9407596b12df8cc45ddc53d3c08e495a2674199c (patch)
treeb7ce3f507de8945aa7e42a64c15d66b3bff05e2a /launcher/modplatform/EnsureMetadataTask.cpp
parentc294c2d1df57c3d599fdea65bab9bb97b1fd699f (diff)
downloadPrismLauncher-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/modplatform/EnsureMetadataTask.cpp')
-rw-r--r--launcher/modplatform/EnsureMetadataTask.cpp52
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;
}
});