add modrinth modpack filter

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97
2024-10-04 17:06:47 +03:00
parent dfe3cd849d
commit 859fac604b
13 changed files with 170 additions and 88 deletions

View File

@@ -88,9 +88,6 @@ class FlameAPI : public NetworkResourceAPI {
public:
static std::optional<QString> getStaticSearchURL(SearchArgs const& args)
{
auto gameVersionStr =
args.versions.has_value() ? QString("gameVersion=%1").arg(args.versions.value().front().toString()) : QString();
QStringList get_arguments;
get_arguments.append(QString("classId=%1").arg(getClassId(args.type)));
get_arguments.append(QString("index=%1").arg(args.offset));
@@ -100,12 +97,13 @@ class FlameAPI : public NetworkResourceAPI {
if (args.sorting.has_value())
get_arguments.append(QString("sortField=%1").arg(args.sorting.value().index));
get_arguments.append("sortOrder=desc");
if (args.loaders.has_value())
if (args.loaders.has_value() && args.loaders.value() != 0)
get_arguments.append(QString("modLoaderTypes=%1").arg(getModLoaderFilters(args.loaders.value())));
if (args.categoryIds.has_value() && !args.categoryIds->empty())
get_arguments.append(QString("categoryIds=[%1]").arg(args.categoryIds->join(",")));
get_arguments.append(gameVersionStr);
if (args.versions.has_value() && !args.versions.value().empty())
get_arguments.append(QString("gameVersion=%1").arg(args.versions.value().front().toString()));
return "https://api.curseforge.com/v1/mods/search?gameId=432&" + get_arguments.join('&');
}

View File

@@ -91,6 +91,8 @@ class ModrinthAPI : public NetworkResourceAPI {
return "resourcepack";
case ModPlatform::ResourceType::SHADER_PACK:
return "shader";
case ModPlatform::ResourceType::MODPACK:
return "modpack";
default:
qWarning() << "Invalid resource type for Modrinth API!";
break;
@@ -99,13 +101,13 @@ class ModrinthAPI : public NetworkResourceAPI {
return "";
}
[[nodiscard]] QString createFacets(SearchArgs const& args) const
[[nodiscard]] static QString createFacets(SearchArgs const& args)
{
QStringList facets_list;
if (args.loaders.has_value())
if (args.loaders.has_value() && args.loaders.value() != 0)
facets_list.append(QString("[%1]").arg(getModLoaderFilters(args.loaders.value())));
if (args.versions.has_value())
if (args.versions.has_value() && !args.versions.value().empty())
facets_list.append(QString("[%1]").arg(getGameVersionsArray(args.versions.value())));
if (args.side.has_value()) {
auto side = getSideFilters(args.side.value());
@@ -121,9 +123,9 @@ class ModrinthAPI : public NetworkResourceAPI {
}
public:
[[nodiscard]] inline auto getSearchURL(SearchArgs const& args) const -> std::optional<QString> override
static std::optional<QString> getStaticSearchURL(SearchArgs const& args)
{
if (args.loaders.has_value()) {
if (args.loaders.has_value() && args.loaders.value() != 0) {
if (!validateModLoaders(args.loaders.value())) {
qWarning() << "Modrinth - or our interface - does not support any the provided mod loaders!";
return {};
@@ -142,6 +144,11 @@ class ModrinthAPI : public NetworkResourceAPI {
return BuildConfig.MODRINTH_PROD_URL + "/search?" + get_arguments.join('&');
};
[[nodiscard]] inline auto getSearchURL(SearchArgs const& args) const -> std::optional<QString> override
{
return getStaticSearchURL(args);
}
inline auto getInfoURL(QString const& id) const -> std::optional<QString> override
{
return BuildConfig.MODRINTH_PROD_URL + "/project/" + id;
@@ -164,7 +171,7 @@ class ModrinthAPI : public NetworkResourceAPI {
.arg(BuildConfig.MODRINTH_PROD_URL, args.pack.addonId.toString(), get_arguments.isEmpty() ? "" : "?", get_arguments.join('&'));
};
auto getGameVersionsArray(std::list<Version> mcVersions) const -> QString
static QString getGameVersionsArray(std::list<Version> mcVersions)
{
QString s;
for (auto& ver : mcVersions) {

View File

@@ -135,6 +135,21 @@ auto loadIndexedVersion(QJsonObject& obj) -> ModpackVersion
if (!gameVersions.isEmpty()) {
file.gameVersion = Json::ensureString(gameVersions[0]);
}
auto loaders = Json::requireArray(obj, "loaders");
for (auto loader : loaders) {
if (loader == "neoforge")
file.loaders |= ModPlatform::NeoForge;
else if (loader == "forge")
file.loaders |= ModPlatform::Forge;
else if (loader == "cauldron")
file.loaders |= ModPlatform::Cauldron;
else if (loader == "liteloader")
file.loaders |= ModPlatform::LiteLoader;
else if (loader == "fabric")
file.loaders |= ModPlatform::Fabric;
else if (loader == "quilt")
file.loaders |= ModPlatform::Quilt;
}
file.version_type = ModPlatform::IndexedVersionType(Json::requireString(obj, "version_type"));
file.changelog = Json::ensureString(obj, "changelog");

View File

@@ -87,6 +87,7 @@ struct ModpackVersion {
QString gameVersion;
ModPlatform::IndexedVersionType version_type;
QString changelog;
ModPlatform::ModLoaderTypes loaders = {};
QString id;
QString project_id;