Added overide for Quilt/Fabric
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
parent
6fd729e285
commit
c13a90540c
@ -25,11 +25,13 @@
|
|||||||
#include "QObjectPtr.h"
|
#include "QObjectPtr.h"
|
||||||
#include "minecraft/mod/MetadataHandler.h"
|
#include "minecraft/mod/MetadataHandler.h"
|
||||||
#include "modplatform/ModIndex.h"
|
#include "modplatform/ModIndex.h"
|
||||||
|
#include "modplatform/ResourceAPI.h"
|
||||||
#include "modplatform/flame/FlameAPI.h"
|
#include "modplatform/flame/FlameAPI.h"
|
||||||
#include "modplatform/modrinth/ModrinthAPI.h"
|
#include "modplatform/modrinth/ModrinthAPI.h"
|
||||||
#include "tasks/ConcurrentTask.h"
|
#include "tasks/ConcurrentTask.h"
|
||||||
#include "tasks/SequentialTask.h"
|
#include "tasks/SequentialTask.h"
|
||||||
#include "ui/pages/modplatform/ModModel.h"
|
#include "ui/pages/modplatform/ModModel.h"
|
||||||
|
#include "ui/pages/modplatform/ResourceModel.h"
|
||||||
#include "ui/pages/modplatform/flame/FlameResourceModels.h"
|
#include "ui/pages/modplatform/flame/FlameResourceModels.h"
|
||||||
#include "ui/pages/modplatform/modrinth/ModrinthResourceModels.h"
|
#include "ui/pages/modplatform/modrinth/ModrinthResourceModels.h"
|
||||||
|
|
||||||
@ -71,6 +73,21 @@ void GetModDependenciesTask::prepare()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto GetModDependenciesTask::getOverride(const ModPlatform::Dependency& dep, const ModPlatform::ResourceProvider providerName)
|
||||||
|
-> ModPlatform::Dependency
|
||||||
|
{
|
||||||
|
if (auto isQuilt = m_loaderType & ResourceAPI::Quilt; isQuilt || m_loaderType & ResourceAPI::Fabric) {
|
||||||
|
auto overide = ModPlatform::getOverrideDeps();
|
||||||
|
auto over = std::find_if(overide.cbegin(), overide.cend(), [dep, providerName, isQuilt](auto o) {
|
||||||
|
return o.provider == providerName && dep.addonId == (isQuilt ? o.fabric : o.quilt);
|
||||||
|
});
|
||||||
|
if (over != overide.cend()) {
|
||||||
|
return { isQuilt ? over->quilt : over->fabric, dep.type };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dep;
|
||||||
|
}
|
||||||
|
|
||||||
QList<ModPlatform::Dependency> GetModDependenciesTask::getDependenciesForVersion(const ModPlatform::IndexedVersion& version,
|
QList<ModPlatform::Dependency> GetModDependenciesTask::getDependenciesForVersion(const ModPlatform::IndexedVersion& version,
|
||||||
const ModPlatform::ResourceProvider providerName)
|
const ModPlatform::ResourceProvider providerName)
|
||||||
{
|
{
|
||||||
@ -111,7 +128,7 @@ QList<ModPlatform::Dependency> GetModDependenciesTask::getDependenciesForVersion
|
|||||||
dep != m_pack_dependencies.end()) // check loaded dependencies
|
dep != m_pack_dependencies.end()) // check loaded dependencies
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
c_dependencies.append(ver_dep);
|
c_dependencies.append(getOverride(ver_dep, providerName));
|
||||||
}
|
}
|
||||||
return c_dependencies;
|
return c_dependencies;
|
||||||
};
|
};
|
||||||
@ -151,6 +168,7 @@ Task::Ptr GetModDependenciesTask::prepareDependencyTask(const ModPlatform::Depen
|
|||||||
pDep->pack = std::make_shared<ModPlatform::IndexedPack>();
|
pDep->pack = std::make_shared<ModPlatform::IndexedPack>();
|
||||||
pDep->pack->addonId = dep.addonId;
|
pDep->pack->addonId = dep.addonId;
|
||||||
pDep->pack->provider = providerName;
|
pDep->pack->provider = providerName;
|
||||||
|
|
||||||
m_pack_dependencies.append(pDep);
|
m_pack_dependencies.append(pDep);
|
||||||
auto provider = providerName == m_flame_provider.name ? m_flame_provider : m_modrinth_provider;
|
auto provider = providerName == m_flame_provider.name ? m_flame_provider : m_modrinth_provider;
|
||||||
|
|
||||||
@ -193,7 +211,13 @@ Task::Ptr GetModDependenciesTask::prepareDependencyTask(const ModPlatform::Depen
|
|||||||
}
|
}
|
||||||
if (dep.addonId.toString().isEmpty() && !pDep->version.addonId.toString().isEmpty()) {
|
if (dep.addonId.toString().isEmpty() && !pDep->version.addonId.toString().isEmpty()) {
|
||||||
pDep->pack->addonId = pDep->version.addonId;
|
pDep->pack->addonId = pDep->version.addonId;
|
||||||
addTask(getProjectInfoTask(pDep));
|
auto dep = getOverride({ pDep->version.addonId, pDep->dependency.type }, provider.name);
|
||||||
|
if (dep.addonId != pDep->version.addonId) {
|
||||||
|
auto toRemoveID = pDep->version.addonId;
|
||||||
|
m_pack_dependencies.removeIf([toRemoveID](auto v) { return v->pack->addonId == toRemoveID; });
|
||||||
|
addTask(prepareDependencyTask(dep, provider.name, level));
|
||||||
|
} else
|
||||||
|
addTask(getProjectInfoTask(pDep));
|
||||||
}
|
}
|
||||||
for (auto dep : getDependenciesForVersion(pDep->version, provider.name)) {
|
for (auto dep : getDependenciesForVersion(pDep->version, provider.name)) {
|
||||||
addTask(prepareDependencyTask(dep, provider.name, level - 1));
|
addTask(prepareDependencyTask(dep, provider.name, level - 1));
|
||||||
|
@ -69,6 +69,7 @@ class GetModDependenciesTask : public SequentialTask {
|
|||||||
const ModPlatform::ResourceProvider providerName);
|
const ModPlatform::ResourceProvider providerName);
|
||||||
void prepare();
|
void prepare();
|
||||||
Task::Ptr getProjectInfoTask(std::shared_ptr<PackDependency> pDep);
|
Task::Ptr getProjectInfoTask(std::shared_ptr<PackDependency> pDep);
|
||||||
|
auto getOverride(const ModPlatform::Dependency&, const ModPlatform::ResourceProvider providerName) -> ModPlatform::Dependency;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<std::shared_ptr<PackDependency>> m_pack_dependencies;
|
QList<std::shared_ptr<PackDependency>> m_pack_dependencies;
|
||||||
|
@ -129,6 +129,22 @@ struct IndexedPack {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct OverrideDep {
|
||||||
|
QString quilt;
|
||||||
|
QString fabric;
|
||||||
|
QString slug;
|
||||||
|
ModPlatform::ResourceProvider provider;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline auto getOverrideDeps() -> QList<OverrideDep>
|
||||||
|
{
|
||||||
|
return { { "634179", "306612", "API", ModPlatform::ResourceProvider::FLAME },
|
||||||
|
{ "720410", "308769", "KotlinLibraries", ModPlatform::ResourceProvider::FLAME },
|
||||||
|
|
||||||
|
{ "qvIfYCYJ", "P7dR8mSH", "API", ModPlatform::ResourceProvider::MODRINTH },
|
||||||
|
{ "lwVhp9o5", "Ha28R6CL", "KotlinLibraries", ModPlatform::ResourceProvider::MODRINTH } };
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace ModPlatform
|
} // namespace ModPlatform
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(ModPlatform::IndexedPack)
|
Q_DECLARE_METATYPE(ModPlatform::IndexedPack)
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include "modplatform/ModIndex.h"
|
#include "modplatform/ModIndex.h"
|
||||||
|
#include "modplatform/ResourceAPI.h"
|
||||||
#include "modplatform/helpers/NetworkResourceAPI.h"
|
#include "modplatform/helpers/NetworkResourceAPI.h"
|
||||||
|
|
||||||
class FlameAPI : public NetworkResourceAPI {
|
class FlameAPI : public NetworkResourceAPI {
|
||||||
@ -74,22 +76,44 @@ class FlameAPI : public NetworkResourceAPI {
|
|||||||
|
|
||||||
[[nodiscard]] std::optional<QString> getVersionsURL(VersionSearchArgs const& args) const override
|
[[nodiscard]] std::optional<QString> getVersionsURL(VersionSearchArgs const& args) const override
|
||||||
{
|
{
|
||||||
QString url{ QString("https://api.curseforge.com/v1/mods/%1/files?pageSize=10000&").arg(args.pack.addonId.toString()) };
|
auto mappedModLoader = getMappedModLoader(args.loaders.value());
|
||||||
|
auto addonId = args.pack.addonId.toString();
|
||||||
|
if (args.loaders.value() & Quilt) {
|
||||||
|
auto overide = ModPlatform::getOverrideDeps();
|
||||||
|
auto over = std::find_if(overide.cbegin(), overide.cend(), [addonId](auto dep) {
|
||||||
|
return dep.provider == ModPlatform::ResourceProvider::FLAME && addonId == dep.quilt;
|
||||||
|
});
|
||||||
|
if (over != overide.cend()) {
|
||||||
|
mappedModLoader = 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QString url{ QString("https://api.curseforge.com/v1/mods/%1/files?pageSize=10000&").arg(addonId) };
|
||||||
|
|
||||||
QStringList get_parameters;
|
QStringList get_parameters;
|
||||||
if (args.mcVersions.has_value())
|
if (args.mcVersions.has_value())
|
||||||
get_parameters.append(QString("gameVersion=%1").arg(args.mcVersions.value().front().toString()));
|
get_parameters.append(QString("gameVersion=%1").arg(args.mcVersions.value().front().toString()));
|
||||||
if (args.loaders.has_value())
|
if (args.loaders.has_value())
|
||||||
get_parameters.append(QString("modLoaderType=%1").arg(getMappedModLoader(args.loaders.value())));
|
get_parameters.append(QString("modLoaderType=%1").arg(mappedModLoader));
|
||||||
|
|
||||||
return url + get_parameters.join('&');
|
return url + get_parameters.join('&');
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] std::optional<QString> getDependencyURL(DependencySearchArgs const& args) const override
|
[[nodiscard]] std::optional<QString> getDependencyURL(DependencySearchArgs const& args) const override
|
||||||
{
|
{
|
||||||
|
auto mappedModLoader = getMappedModLoader(args.loader);
|
||||||
|
auto addonId = args.dependency.addonId.toString();
|
||||||
|
if (args.loader & Quilt) {
|
||||||
|
auto overide = ModPlatform::getOverrideDeps();
|
||||||
|
auto over = std::find_if(overide.cbegin(), overide.cend(), [addonId](auto dep) {
|
||||||
|
return dep.provider == ModPlatform::ResourceProvider::FLAME && addonId == dep.quilt;
|
||||||
|
});
|
||||||
|
if (over != overide.cend()) {
|
||||||
|
mappedModLoader = 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
return QString("https://api.curseforge.com/v1/mods/%1/files?pageSize=10000&gameVersion=%2&modLoaderType=%3")
|
return QString("https://api.curseforge.com/v1/mods/%1/files?pageSize=10000&gameVersion=%2&modLoaderType=%3")
|
||||||
.arg(args.dependency.addonId.toString())
|
.arg(addonId)
|
||||||
.arg(args.mcVersion.toString())
|
.arg(args.mcVersion.toString())
|
||||||
.arg(getMappedModLoader(args.loader));
|
.arg(mappedModLoader);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user