diff options
author | flow <flowlnlnln@gmail.com> | 2022-10-28 13:31:21 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-10-28 13:31:21 -0300 |
commit | e6e92f2b0e9ef16bdbae371ccb284339a70cff02 (patch) | |
tree | 0d11feec73e7161bb626855157130d98f2a5b80a /launcher | |
parent | f229574758871d7e95c835c3ec026635799c7015 (diff) | |
download | PrismLauncher-e6e92f2b0e9ef16bdbae371ccb284339a70cff02.tar.gz PrismLauncher-e6e92f2b0e9ef16bdbae371ccb284339a70cff02.tar.bz2 PrismLauncher-e6e92f2b0e9ef16bdbae371ccb284339a70cff02.zip |
fix: only allow workarounds for blocked mods from MR when 100% safe
If a version on Modrinth has more than a single mod loader associated,
it means that it's possible we might get the wrong file for download,
since individual files don't really have this kind of metadata in the
API response.
So, in such cases, it's best to let the user take care of it instead.
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher')
-rw-r--r-- | launcher/modplatform/flame/FileResolvingTask.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp index c50abb8f..25b56fbd 100644 --- a/launcher/modplatform/flame/FileResolvingTask.cpp +++ b/launcher/modplatform/flame/FileResolvingTask.cpp @@ -3,6 +3,8 @@ #include "Json.h" #include "net/Upload.h" +#include "modplatform/modrinth/ModrinthPackIndex.h" + Flame::FileResolvingTask::FileResolvingTask(const shared_qobject_ptr<QNetworkAccessManager>& network, Flame::Manifest& toProcess) : m_network(network), m_toProcess(toProcess) {} @@ -84,18 +86,21 @@ void Flame::FileResolvingTask::modrinthCheckFinished() { delete bytes; continue; } + QJsonDocument doc = QJsonDocument::fromJson(*bytes); auto obj = doc.object(); - auto array = Json::requireArray(obj,"files"); - for (auto file: array) { - auto fileObj = Json::requireObject(file); - auto primary = Json::requireBoolean(fileObj,"primary"); - if (primary) { - out->url = Json::requireUrl(fileObj,"url"); - qDebug() << "Found alternative on modrinth " << out->fileName; - break; - } + auto file = Modrinth::loadIndexedPackVersion(obj); + + // If there's more than one mod loader for this version, we can't know for sure + // which file is relative to each loader, so it's best to not use any one and + // let the user download it manually. + if (file.loaders.size() <= 1) { + out->url = file.downloadUrl; + qDebug() << "Found alternative on modrinth " << out->fileName; + } else { + out->resolved = false; } + delete bytes; } //copy to an output list and filter out projects found on modrinth |