From e16235c1ca44c2d513ab7d06696c18acabb52e02 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 16 Mar 2026 14:57:35 -0700 Subject: [PATCH] fix: don't always ask for the changelog from modrinth - per https://discordapp.com/channels/734077874708938864/974050507150729236/1461487847142985982 `/project//version` now has an `include_changelog` query param which can be set to false to save oodles of bandwidth Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- .../mod/tasks/GetModDependenciesTask.cpp | 4 +++- launcher/modplatform/ResourceAPI.h | 14 ++++++++------ launcher/modplatform/modrinth/ModrinthAPI.h | 16 ++++++++++------ .../modplatform/modrinth/ModrinthPackIndex.cpp | 4 +++- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/launcher/minecraft/mod/tasks/GetModDependenciesTask.cpp b/launcher/minecraft/mod/tasks/GetModDependenciesTask.cpp index d1d4aba3c..564f276c3 100644 --- a/launcher/minecraft/mod/tasks/GetModDependenciesTask.cpp +++ b/launcher/minecraft/mod/tasks/GetModDependenciesTask.cpp @@ -180,7 +180,9 @@ Task::Ptr GetModDependenciesTask::prepareDependencyTask(const ModPlatform::Depen tasks->addTask(getProjectInfoTask(pDep)); } - ResourceAPI::DependencySearchArgs args = { dep, m_version, m_loaderType }; + ResourceAPI::DependencySearchArgs args = { + .dependency = dep, .mcVersion = m_version, .loader = m_loaderType, .includeChangelog = true + }; ResourceAPI::Callback callbacks; callbacks.on_fail = [](QString reason, int) { qCritical() << tr("A network error occurred. Could not load project dependencies:%1").arg(reason); diff --git a/launcher/modplatform/ResourceAPI.h b/launcher/modplatform/ResourceAPI.h index a83adf82c..0ad55775c 100644 --- a/launcher/modplatform/ResourceAPI.h +++ b/launcher/modplatform/ResourceAPI.h @@ -71,7 +71,7 @@ class ResourceAPI { template struct Callback { std::function on_succeed; - std::function on_fail; + std::function on_fail; std::function on_abort; }; @@ -85,7 +85,7 @@ class ResourceAPI { std::optional> versions; std::optional side; std::optional categoryIds; - bool openSource; + bool openSource{}; }; struct VersionSearchArgs { @@ -94,6 +94,7 @@ class ResourceAPI { std::optional> mcVersions; std::optional loaders; ModPlatform::ResourceType resourceType; + bool includeChangelog{}; }; struct ProjectInfoArgs { @@ -104,6 +105,7 @@ class ResourceAPI { ModPlatform::Dependency dependency; Version mcVersion; ModPlatform::ModLoaderTypes loader; + bool includeChangelog{}; }; public: @@ -128,10 +130,10 @@ class ResourceAPI { QString getGameVersionsString(std::vector mcVersions) const; public: - virtual auto getSearchURL(SearchArgs const& args) const -> std::optional = 0; - virtual auto getInfoURL(QString const& id) const -> std::optional = 0; - virtual auto getVersionsURL(VersionSearchArgs const& args) const -> std::optional = 0; - virtual auto getDependencyURL(DependencySearchArgs const& args) const -> std::optional = 0; + virtual auto getSearchURL(const SearchArgs& args) const -> std::optional = 0; + virtual auto getInfoURL(const QString& id) const -> std::optional = 0; + virtual auto getVersionsURL(const VersionSearchArgs& args) const -> std::optional = 0; + virtual auto getDependencyURL(const DependencySearchArgs& args) const -> std::optional = 0; /** Functions to load data into a pack. * diff --git a/launcher/modplatform/modrinth/ModrinthAPI.h b/launcher/modplatform/modrinth/ModrinthAPI.h index 412826182..bd9283472 100644 --- a/launcher/modplatform/modrinth/ModrinthAPI.h +++ b/launcher/modplatform/modrinth/ModrinthAPI.h @@ -186,6 +186,8 @@ class ModrinthAPI : public ResourceAPI { get_arguments.append(QString("game_versions=[%1]").arg(getGameVersionsString(args.mcVersions.value()))); if (args.loaders.has_value()) get_arguments.append(QString("loaders=[\"%1\"]").arg(getModLoaderStrings(args.loaders.value()).join("\",\""))); + } + get_arguments.append(QString("include_changelog=%1").arg(args.includeChangelog ? "true" : "false")); return QString("%1/project/%2/version%3%4") .arg(BuildConfig.MODRINTH_PROD_URL, args.pack->addonId.toString(), get_arguments.isEmpty() ? "" : "?", get_arguments.join('&')); @@ -210,12 +212,14 @@ class ModrinthAPI : public ResourceAPI { std::optional getDependencyURL(DependencySearchArgs const& args) const override { - return args.dependency.version.length() != 0 ? QString("%1/version/%2").arg(BuildConfig.MODRINTH_PROD_URL, args.dependency.version) - : QString("%1/project/%2/version?game_versions=[\"%3\"]&loaders=[\"%4\"]") - .arg(BuildConfig.MODRINTH_PROD_URL) - .arg(args.dependency.addonId.toString()) - .arg(mapMCVersionToModrinth(args.mcVersion)) - .arg(getModLoaderStrings(args.loader).join("\",\"")); + return args.dependency.version.length() != 0 + ? QString("%1/version/%2").arg(BuildConfig.MODRINTH_PROD_URL, args.dependency.version) + : QString(R"(%1/project/%2/version?game_versions=["%3"]&loaders=["%4"]&include_changelog=%5)") + .arg(BuildConfig.MODRINTH_PROD_URL) + .arg(args.dependency.addonId.toString()) + .arg(mapMCVersionToModrinth(args.mcVersion)) + .arg(getModLoaderStrings(args.loader).join("\",\"")) + .arg(args.includeChangelog ? "true" : "false"); }; QJsonArray documentToArray(QJsonDocument& obj) const override { return obj.object().value("hits").toArray(); } diff --git a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp index 699e12b40..5c0416bbc 100644 --- a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp +++ b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp @@ -148,7 +148,9 @@ ModPlatform::IndexedVersion Modrinth::loadIndexedPackVersion(QJsonObject& obj, Q file.version_number = Json::requireString(obj, "version_number"); file.version_type = ModPlatform::IndexedVersionType::fromString(Json::requireString(obj, "version_type")); - file.changelog = Json::requireString(obj, "changelog"); + if (obj.contains("changelog")) { + file.changelog = Json::requireString(obj, "changelog"); + } auto dependencies = obj["dependencies"].toArray(); for (auto d : dependencies) {