fix: don't always ask for the changelog from modrinth

- per https://discordapp.com/channels/734077874708938864/974050507150729236/1461487847142985982

  `/project/<id>/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>
This commit is contained in:
Rachel Powers 2026-03-16 14:57:35 -07:00
parent 98c3129424
commit e16235c1ca
No known key found for this signature in database
GPG key ID: B4CB507E51F8B89C
4 changed files with 24 additions and 14 deletions

View file

@ -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<ModPlatform::IndexedVersion> callbacks;
callbacks.on_fail = [](QString reason, int) {
qCritical() << tr("A network error occurred. Could not load project dependencies:%1").arg(reason);

View file

@ -71,7 +71,7 @@ class ResourceAPI {
template <typename T>
struct Callback {
std::function<void(T&)> on_succeed;
std::function<void(QString const& reason, int network_error_code)> on_fail;
std::function<void(const QString& reason, int network_error_code)> on_fail;
std::function<void()> on_abort;
};
@ -85,7 +85,7 @@ class ResourceAPI {
std::optional<std::vector<Version>> versions;
std::optional<ModPlatform::Side> side;
std::optional<QStringList> categoryIds;
bool openSource;
bool openSource{};
};
struct VersionSearchArgs {
@ -94,6 +94,7 @@ class ResourceAPI {
std::optional<std::vector<Version>> mcVersions;
std::optional<ModPlatform::ModLoaderTypes> 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<Version> mcVersions) const;
public:
virtual auto getSearchURL(SearchArgs const& args) const -> std::optional<QString> = 0;
virtual auto getInfoURL(QString const& id) const -> std::optional<QString> = 0;
virtual auto getVersionsURL(VersionSearchArgs const& args) const -> std::optional<QString> = 0;
virtual auto getDependencyURL(DependencySearchArgs const& args) const -> std::optional<QString> = 0;
virtual auto getSearchURL(const SearchArgs& args) const -> std::optional<QString> = 0;
virtual auto getInfoURL(const QString& id) const -> std::optional<QString> = 0;
virtual auto getVersionsURL(const VersionSearchArgs& args) const -> std::optional<QString> = 0;
virtual auto getDependencyURL(const DependencySearchArgs& args) const -> std::optional<QString> = 0;
/** Functions to load data into a pack.
*

View file

@ -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<QString> 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(); }

View file

@ -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) {