aboutsummaryrefslogtreecommitdiff
path: root/launcher/modplatform/flame
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-12-01 15:33:35 -0300
committerflow <flowlnlnln@gmail.com>2022-12-01 15:33:35 -0300
commit386fb28a35e4195838c0711dc894626a5d259c0e (patch)
treee9e84b7b4d4b89e4a5836a8e8e43e0115ee4cd92 /launcher/modplatform/flame
parent79b79b752ce9c22764601da8c4ad7ca77ab8a016 (diff)
downloadPrismLauncher-386fb28a35e4195838c0711dc894626a5d259c0e.tar.gz
PrismLauncher-386fb28a35e4195838c0711dc894626a5d259c0e.tar.bz2
PrismLauncher-386fb28a35e4195838c0711dc894626a5d259c0e.zip
fix(FileResolvingTask): Fail instead of crash when there's API errors
Also remove non-used variable (rip). Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/modplatform/flame')
-rw-r--r--launcher/modplatform/flame/FileResolvingTask.cpp20
-rw-r--r--launcher/modplatform/flame/FlameInstanceCreationTask.cpp1
2 files changed, 17 insertions, 4 deletions
diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp
index 25b56fbd..7f1beb1a 100644
--- a/launcher/modplatform/flame/FileResolvingTask.cpp
+++ b/launcher/modplatform/flame/FileResolvingTask.cpp
@@ -42,12 +42,25 @@ void Flame::FileResolvingTask::executeTask()
void Flame::FileResolvingTask::netJobFinished()
{
setProgress(1, 3);
- int index = 0;
// job to check modrinth for blocked projects
m_checkJob = new NetJob("Modrinth check", m_network);
blockedProjects = QMap<File *,QByteArray *>();
- auto doc = Json::requireDocument(*result);
- auto array = Json::requireArray(doc.object()["data"]);
+
+ QJsonDocument doc;
+ QJsonArray array;
+
+ try {
+ doc = Json::requireDocument(*result);
+ array = Json::requireArray(doc.object()["data"]);
+ } catch (Json::JsonException& e) {
+ qCritical() << "Non-JSON data returned from the CF API";
+ qCritical() << e.cause();
+
+ emitFailed(tr("Invalid data returned from the API."));
+
+ return;
+ }
+
for (QJsonValueRef file : array) {
auto fileid = Json::requireInteger(Json::requireObject(file)["id"]);
auto& out = m_toProcess.files[fileid];
@@ -68,7 +81,6 @@ void Flame::FileResolvingTask::netJobFinished()
blockedProjects.insert(&out, output);
}
}
- index++;
}
connect(m_checkJob.get(), &NetJob::finished, this, &Flame::FileResolvingTask::modrinthCheckFinished);
diff --git a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp
index 91554b58..a00c948a 100644
--- a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp
+++ b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp
@@ -338,6 +338,7 @@ bool FlameCreationTask::createInstance()
connect(m_mod_id_resolver.get(), &Flame::FileResolvingTask::failed, [&](QString reason) {
m_mod_id_resolver.reset();
setError(tr("Unable to resolve mod IDs:\n") + reason);
+ loop.quit();
});
connect(m_mod_id_resolver.get(), &Flame::FileResolvingTask::progress, this, &FlameCreationTask::setProgress);
connect(m_mod_id_resolver.get(), &Flame::FileResolvingTask::status, this, &FlameCreationTask::setStatus);