chore: update link and sync with other providers changes

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2025-03-30 17:32:24 +03:00
parent 22dfeec865
commit 9359c4833d
No known key found for this signature in database
GPG Key ID: 55EF5DA53DB36318
12 changed files with 82 additions and 73 deletions

View File

@ -173,6 +173,7 @@ class Config {
QString TRANSLATION_FILES_URL;
QString MODPACKSCH_API_BASE_URL = "https://api.modpacks.ch/";
QString FTB_API_BASE_URL = "https://api.feed-the-beast.com/v1/modpacks/public";
QString LEGACY_FTB_CDN_BASE_URL = "https://dist.creeper.host/FTB2/";

View File

@ -999,7 +999,6 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_metacache->addBase("FTBPacks", QDir("cache/FTBPacks").absolutePath());
m_metacache->addBase("TechnicPacks", QDir("cache/TechnicPacks").absolutePath());
m_metacache->addBase("FlamePacks", QDir("cache/FlamePacks").absolutePath());
m_metacache->addBase("ModpacksCHPacks", QDir("cache/ModpacksCHPacks").absolutePath());
m_metacache->addBase("FlameMods", QDir("cache/FlameMods").absolutePath());
m_metacache->addBase("ModrinthPacks", QDir("cache/ModrinthPacks").absolutePath());
m_metacache->addBase("ModrinthModpacks", QDir("cache/ModrinthModpacks").absolutePath());

View File

@ -533,6 +533,11 @@ set(FTB_SOURCES
modplatform/import_ftb/PackInstallTask.cpp
modplatform/import_ftb/PackHelpers.h
modplatform/import_ftb/PackHelpers.cpp
modplatform/ftb/FTBPackInstallTask.h
modplatform/ftb/FTBPackInstallTask.cpp
modplatform/ftb/FTBPackManifest.h
modplatform/ftb/FTBPackManifest.cpp
)
set(FLAME_SOURCES
@ -566,13 +571,6 @@ set(MODRINTH_SOURCES
modplatform/modrinth/ModrinthPackExportTask.h
)
set(MODPACKSCH_SOURCES
modplatform/modpacksch/FTBPackInstallTask.h
modplatform/modpacksch/FTBPackInstallTask.cpp
modplatform/modpacksch/FTBPackManifest.h
modplatform/modpacksch/FTBPackManifest.cpp
)
set(PACKWIZ_SOURCES
modplatform/packwiz/Packwiz.h
modplatform/packwiz/Packwiz.cpp
@ -785,7 +783,6 @@ set(LOGIC_SOURCES
${FTB_SOURCES}
${FLAME_SOURCES}
${MODRINTH_SOURCES}
${MODPACKSCH_SOURCES}
${PACKWIZ_SOURCES}
${TECHNIC_SOURCES}
${ATLAUNCHER_SOURCES}

View File

@ -42,6 +42,7 @@
#include "Json.h"
#include "minecraft/MinecraftInstance.h"
#include "minecraft/PackProfile.h"
#include "modplatform/flame/FileResolvingTask.h"
#include "modplatform/flame/PackManifest.h"
#include "net/ChecksumValidator.h"
#include "settings/INISettingsObject.h"
@ -50,7 +51,7 @@
#include "BuildConfig.h"
#include "ui/dialogs/BlockedModsDialog.h"
namespace ModpacksCH {
namespace FTB {
PackInstallTask::PackInstallTask(Modpack pack, QString version, QWidget* parent)
: m_pack(std::move(pack)), m_versionName(std::move(version)), m_parent(parent)
@ -78,7 +79,7 @@ void PackInstallTask::executeTask()
// Find pack version
auto version_it = std::find_if(m_pack.versions.constBegin(), m_pack.versions.constEnd(),
[this](ModpacksCH::VersionInfo const& a) { return a.name == m_versionName; });
[this](FTB::VersionInfo const& a) { return a.name == m_versionName; });
if (version_it == m_pack.versions.constEnd()) {
emitFailed(tr("Failed to find pack version %1").arg(m_versionName));
@ -87,9 +88,9 @@ void PackInstallTask::executeTask()
auto version = *version_it;
auto netJob = makeShared<NetJob>("ModpacksCH::VersionFetch", APPLICATION->network());
auto netJob = makeShared<NetJob>("FTB::VersionFetch", APPLICATION->network());
auto searchUrl = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/%1/%2").arg(m_pack.id).arg(version.id);
auto searchUrl = QString(BuildConfig.FTB_API_BASE_URL + "/modpack/%1/%2").arg(m_pack.id).arg(version.id);
m_response.reset(new QByteArray());
netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), m_response));
@ -111,16 +112,15 @@ void PackInstallTask::onManifestDownloadSucceeded()
QJsonParseError parse_error{};
QJsonDocument doc = QJsonDocument::fromJson(*m_response, &parse_error);
if (parse_error.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from ModpacksCH at " << parse_error.offset
<< " reason: " << parse_error.errorString();
qWarning() << "Error while parsing JSON response from FTB at " << parse_error.offset << " reason: " << parse_error.errorString();
qWarning() << *m_response;
return;
}
ModpacksCH::Version version;
FTB::Version version;
try {
auto obj = Json::requireObject(doc);
ModpacksCH::loadVersion(version, obj);
FTB::loadVersion(version, obj);
} catch (const JSONValidationError& e) {
emitFailed(tr("Could not understand pack manifest:\n") + e.cause());
return;
@ -151,8 +151,6 @@ void PackInstallTask::resolveMods()
flameFile.projectId = file.curseforge.project_id;
flameFile.fileId = file.curseforge.file_id;
// flame_file.hash = file.sha1;
manifest.files.insert(flameFile.fileId, flameFile);
m_fileIds.append(flameFile.fileId);
} else {
@ -160,7 +158,7 @@ void PackInstallTask::resolveMods()
}
}
m_modIdResolverTask.reset(new Flame::FileResolvingTask(APPLICATION->network(), manifest));
m_modIdResolverTask.reset(new Flame::FileResolvingTask(manifest));
connect(m_modIdResolverTask.get(), &Flame::FileResolvingTask::succeeded, this, &PackInstallTask::onResolveModsSucceeded);
connect(m_modIdResolverTask.get(), &Flame::FileResolvingTask::failed, this, &PackInstallTask::onResolveModsFailed);
@ -279,7 +277,7 @@ void PackInstallTask::createInstance()
instance.setName(name());
instance.setIconKey(m_instIcon);
instance.setManagedPack("modpacksch", QString::number(m_pack.id), m_pack.name, QString::number(m_version.id), m_version.name);
instance.setManagedPack("ftb", QString::number(m_pack.id), m_pack.name, QString::number(m_version.id), m_version.name);
instance.saveNow();
@ -385,4 +383,4 @@ void PackInstallTask::copyBlockedMods()
setAbortable(true);
}
} // namespace ModpacksCH
} // namespace FTB

View File

@ -47,7 +47,7 @@
#include <QWidget>
namespace ModpacksCH {
namespace FTB {
class PackInstallTask final : public InstanceTask {
Q_OBJECT
@ -97,4 +97,4 @@ class PackInstallTask final : public InstanceTask {
QWidget* m_parent;
};
} // namespace ModpacksCH
} // namespace FTB

View File

@ -38,20 +38,20 @@
#include "Json.h"
static void loadSpecs(ModpacksCH::Specs& s, QJsonObject& obj)
static void loadSpecs(FTB::Specs& s, QJsonObject& obj)
{
s.id = Json::requireInteger(obj, "id");
s.minimum = Json::requireInteger(obj, "minimum");
s.recommended = Json::requireInteger(obj, "recommended");
}
static void loadTag(ModpacksCH::Tag& t, QJsonObject& obj)
static void loadTag(FTB::Tag& t, QJsonObject& obj)
{
t.id = Json::requireInteger(obj, "id");
t.name = Json::requireString(obj, "name");
}
static void loadArt(ModpacksCH::Art& a, QJsonObject& obj)
static void loadArt(FTB::Art& a, QJsonObject& obj)
{
a.id = Json::requireInteger(obj, "id");
a.url = Json::requireString(obj, "url");
@ -60,11 +60,11 @@ static void loadArt(ModpacksCH::Art& a, QJsonObject& obj)
a.height = Json::requireInteger(obj, "height");
a.compressed = Json::requireBoolean(obj, "compressed");
a.sha1 = Json::requireString(obj, "sha1");
a.size = Json::requireInteger(obj, "size");
a.size = Json::ensureInteger(obj, "size");
a.updated = Json::requireInteger(obj, "updated");
}
static void loadAuthor(ModpacksCH::Author& a, QJsonObject& obj)
static void loadAuthor(FTB::Author& a, QJsonObject& obj)
{
a.id = Json::requireInteger(obj, "id");
a.name = Json::requireString(obj, "name");
@ -73,7 +73,7 @@ static void loadAuthor(ModpacksCH::Author& a, QJsonObject& obj)
a.updated = Json::requireInteger(obj, "updated");
}
static void loadVersionInfo(ModpacksCH::VersionInfo& v, QJsonObject& obj)
static void loadVersionInfo(FTB::VersionInfo& v, QJsonObject& obj)
{
v.id = Json::requireInteger(obj, "id");
v.name = Json::requireString(obj, "name");
@ -83,7 +83,7 @@ static void loadVersionInfo(ModpacksCH::VersionInfo& v, QJsonObject& obj)
loadSpecs(v.specs, specs);
}
void ModpacksCH::loadModpack(ModpacksCH::Modpack& m, QJsonObject& obj)
void FTB::loadModpack(FTB::Modpack& m, QJsonObject& obj)
{
m.id = Json::requireInteger(obj, "id");
m.name = Json::requireString(obj, "name");
@ -95,39 +95,39 @@ void ModpacksCH::loadModpack(ModpacksCH::Modpack& m, QJsonObject& obj)
m.installs = Json::requireInteger(obj, "installs");
m.plays = Json::requireInteger(obj, "plays");
m.updated = Json::requireInteger(obj, "updated");
m.refreshed = Json::requireInteger(obj, "refreshed");
m.refreshed = Json::ensureInteger(obj, "refreshed");
auto artArr = Json::requireArray(obj, "art");
for (QJsonValueRef artRaw : artArr) {
auto artObj = Json::requireObject(artRaw);
ModpacksCH::Art art;
FTB::Art art;
loadArt(art, artObj);
m.art.append(art);
}
auto authorArr = Json::requireArray(obj, "authors");
for (QJsonValueRef authorRaw : authorArr) {
auto authorObj = Json::requireObject(authorRaw);
ModpacksCH::Author author;
FTB::Author author;
loadAuthor(author, authorObj);
m.authors.append(author);
}
auto versionArr = Json::requireArray(obj, "versions");
for (QJsonValueRef versionRaw : versionArr) {
auto versionObj = Json::requireObject(versionRaw);
ModpacksCH::VersionInfo version;
FTB::VersionInfo version;
loadVersionInfo(version, versionObj);
m.versions.append(version);
}
auto tagArr = Json::requireArray(obj, "tags");
for (QJsonValueRef tagRaw : tagArr) {
auto tagObj = Json::requireObject(tagRaw);
ModpacksCH::Tag tag;
FTB::Tag tag;
loadTag(tag, tagObj);
m.tags.append(tag);
}
m.updated = Json::requireInteger(obj, "updated");
}
static void loadVersionTarget(ModpacksCH::VersionTarget& a, QJsonObject& obj)
static void loadVersionTarget(FTB::VersionTarget& a, QJsonObject& obj)
{
a.id = Json::requireInteger(obj, "id");
a.name = Json::requireString(obj, "name");
@ -136,7 +136,7 @@ static void loadVersionTarget(ModpacksCH::VersionTarget& a, QJsonObject& obj)
a.updated = Json::requireInteger(obj, "updated");
}
static void loadVersionFile(ModpacksCH::VersionFile& a, QJsonObject& obj)
static void loadVersionFile(FTB::VersionFile& a, QJsonObject& obj)
{
a.id = Json::requireInteger(obj, "id");
a.type = Json::requireString(obj, "type");
@ -145,7 +145,7 @@ static void loadVersionFile(ModpacksCH::VersionFile& a, QJsonObject& obj)
a.version = Json::requireString(obj, "version");
a.url = Json::ensureString(obj, "url"); // optional
a.sha1 = Json::requireString(obj, "sha1");
a.size = Json::requireInteger(obj, "size");
a.size = Json::ensureInteger(obj, "size");
a.clientOnly = Json::requireBoolean(obj, "clientonly");
a.serverOnly = Json::requireBoolean(obj, "serveronly");
a.optional = Json::requireBoolean(obj, "optional");
@ -155,7 +155,7 @@ static void loadVersionFile(ModpacksCH::VersionFile& a, QJsonObject& obj)
a.curseforge.file_id = Json::ensureInteger(curseforgeObj, "file");
}
void ModpacksCH::loadVersion(ModpacksCH::Version& m, QJsonObject& obj)
void FTB::loadVersion(FTB::Version& m, QJsonObject& obj)
{
m.id = Json::requireInteger(obj, "id");
m.parent = Json::requireInteger(obj, "parent");
@ -164,20 +164,20 @@ void ModpacksCH::loadVersion(ModpacksCH::Version& m, QJsonObject& obj)
m.installs = Json::requireInteger(obj, "installs");
m.plays = Json::requireInteger(obj, "plays");
m.updated = Json::requireInteger(obj, "updated");
m.refreshed = Json::requireInteger(obj, "refreshed");
m.refreshed = Json::ensureInteger(obj, "refreshed");
auto specs = Json::requireObject(obj, "specs");
loadSpecs(m.specs, specs);
auto targetArr = Json::requireArray(obj, "targets");
for (QJsonValueRef targetRaw : targetArr) {
auto versionObj = Json::requireObject(targetRaw);
ModpacksCH::VersionTarget target;
FTB::VersionTarget target;
loadVersionTarget(target, versionObj);
m.targets.append(target);
}
auto fileArr = Json::requireArray(obj, "files");
for (QJsonValueRef fileRaw : fileArr) {
auto fileObj = Json::requireObject(fileRaw);
ModpacksCH::VersionFile file;
FTB::VersionFile file;
loadVersionFile(file, fileObj);
m.files.append(file);
}

View File

@ -42,7 +42,7 @@
#include <QUrl>
#include <QVector>
namespace ModpacksCH {
namespace FTB {
struct Specs {
int id;
@ -152,6 +152,6 @@ struct VersionChangelog {
void loadModpack(Modpack& m, QJsonObject& obj);
void loadVersion(Version& m, QJsonObject& obj);
} // namespace ModpacksCH
} // namespace FTB
Q_DECLARE_METATYPE(ModpacksCH::Modpack)
Q_DECLARE_METATYPE(FTB::Modpack)

View File

@ -18,7 +18,7 @@
#include <QDebug>
#include "modplatform/modpacksch/FTBPackManifest.h"
#include "modplatform/ftb/FTBPackManifest.h"
#include "StringUtils.h"
@ -66,14 +66,14 @@ bool FilterModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParen
}
auto index = sourceModel()->index(sourceRow, 0, sourceParent);
auto pack = sourceModel()->data(index, Qt::UserRole).value<ModpacksCH::Modpack>();
auto pack = sourceModel()->data(index, Qt::UserRole).value<FTB::Modpack>();
return pack.name.contains(m_searchTerm, Qt::CaseInsensitive);
}
bool FilterModel::lessThan(const QModelIndex& left, const QModelIndex& right) const
{
ModpacksCH::Modpack leftPack = sourceModel()->data(left, Qt::UserRole).value<ModpacksCH::Modpack>();
ModpacksCH::Modpack rightPack = sourceModel()->data(right, Qt::UserRole).value<ModpacksCH::Modpack>();
FTB::Modpack leftPack = sourceModel()->data(left, Qt::UserRole).value<FTB::Modpack>();
FTB::Modpack rightPack = sourceModel()->data(right, Qt::UserRole).value<FTB::Modpack>();
if (m_currentSorting == ByPlays) {
return leftPack.plays < rightPack.plays;

View File

@ -45,7 +45,7 @@ QVariant ListModel::data(const QModelIndex& index, int role) const
return QString("INVALID INDEX %1").arg(pos);
}
ModpacksCH::Modpack pack = m_modpacks.at(pos);
FTB::Modpack pack = m_modpacks.at(pos);
if (role == Qt::DisplayRole) {
return pack.name;
} else if (role == Qt::ToolTipRole) {
@ -80,7 +80,7 @@ QVariant ListModel::data(const QModelIndex& index, int role) const
void ListModel::getLogo(const QString& logo, const QString& logoUrl, LogoCallback callback)
{
if (m_logoMap.contains(logo)) {
callback(APPLICATION->metacache()->resolveEntry("ModpacksCHPacks", QString("logos/%1").arg(logo))->getFullPath());
callback(APPLICATION->metacache()->resolveEntry("FTBPacks", QString("logos/%1").arg(logo))->getFullPath());
} else {
requestLogo(logo, logoUrl);
}
@ -95,7 +95,7 @@ void ListModel::request()
endResetModel();
auto netJob = makeShared<NetJob>("Ftb::Request", APPLICATION->network());
auto url = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/all");
auto url = QString(BuildConfig.FTB_API_BASE_URL + "/modpack/all");
m_response.reset(new QByteArray());
netJob->addNetAction(Net::Download::makeByteArray(QUrl(url), m_response));
m_jobPtr = netJob;
@ -119,8 +119,7 @@ void ListModel::requestFinished()
QJsonParseError parse_error{};
QJsonDocument doc = QJsonDocument::fromJson(*m_response, &parse_error);
if (parse_error.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from ModpacksCH at " << parse_error.offset
<< " reason: " << parse_error.errorString();
qWarning() << "Error while parsing JSON response from FTB at " << parse_error.offset << " reason: " << parse_error.errorString();
qWarning() << *m_response;
return;
}
@ -146,7 +145,7 @@ void ListModel::requestFailed(QString)
void ListModel::requestPack()
{
auto netJob = makeShared<NetJob>("Ftb::Search", APPLICATION->network());
auto searchUrl = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/%1").arg(m_currentPack);
auto searchUrl = QString(BuildConfig.FTB_API_BASE_URL + "/modpack/%1").arg(m_currentPack);
m_response.reset(new QByteArray());
netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), m_response));
m_jobPtr = netJob;
@ -168,27 +167,26 @@ void ListModel::packRequestFinished()
QJsonDocument doc = QJsonDocument::fromJson(*m_response, &parse_error);
if (parse_error.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from ModpacksCH at " << parse_error.offset
<< " reason: " << parse_error.errorString();
qWarning() << "Error while parsing JSON response from FTB at " << parse_error.offset << " reason: " << parse_error.errorString();
qWarning() << *m_response;
return;
}
auto obj = doc.object();
ModpacksCH::Modpack pack;
FTB::Modpack pack;
try {
ModpacksCH::loadModpack(pack, obj);
FTB::loadModpack(pack, obj);
} catch (const JSONValidationError& e) {
qDebug() << QString::fromUtf8(*m_response);
qWarning() << "Error while reading pack manifest from ModpacksCH: " << e.cause();
qWarning() << "Error while reading pack manifest from FTB: " << e.cause();
return;
}
// Since there is no guarantee that packs have a version, this will just
// ignore those "dud" packs.
if (pack.versions.empty()) {
qWarning() << "ModpacksCH Pack " << pack.id << " ignored. reason: lacking any versions";
qWarning() << "FTB Pack " << pack.id << " ignored. reason: lacking any versions";
} else {
beginInsertRows(QModelIndex(), m_modpacks.size(), m_modpacks.size());
m_modpacks.append(pack);
@ -231,9 +229,9 @@ void ListModel::requestLogo(QString logo, QString url)
return;
}
MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("ModpacksCHPacks", QString("logos/%1").arg(logo));
MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("FTBPacks", QString("logos/%1").arg(logo));
auto job = makeShared<NetJob>(QString("ModpacksCH Icon Download %1").arg(logo), APPLICATION->network());
auto job = makeShared<NetJob>(QString("FTB Icon Download %1").arg(logo), APPLICATION->network());
job->setAskRetry(false);
job->addNetAction(Net::Download::makeCached(QUrl(url), entry));

View File

@ -19,7 +19,7 @@
#include <QAbstractListModel>
#include <QIcon>
#include "modplatform/modpacksch/FTBPackManifest.h"
#include "modplatform/ftb/FTBPackManifest.h"
#include "net/NetJob.h"
namespace Ftb {
@ -31,8 +31,8 @@ struct Logo {
bool failed = false;
};
typedef QMap<QString, Logo> LogoMap;
typedef std::function<void(QString)> LogoCallback;
using LogoMap = QMap<QString, Logo>;
using LogoCallback = std::function<void(QString)>;
class ListModel : public QAbstractListModel {
Q_OBJECT
@ -70,7 +70,7 @@ class ListModel : public QAbstractListModel {
private:
bool m_aborted = false;
QList<ModpacksCH::Modpack> m_modpacks;
QList<FTB::Modpack> m_modpacks;
LogoMap m_logoMap;
NetJob::Ptr m_jobPtr;

View File

@ -40,7 +40,7 @@
#include <QKeyEvent>
#include "modplatform/modpacksch/FTBPackInstallTask.h"
#include "modplatform/ftb/FTBPackInstallTask.h"
#include "ui/dialogs/NewInstanceDialog.h"
#include "Markdown.h"
@ -130,7 +130,7 @@ void FtbPage::suggestCurrent()
return;
}
m_dialog->setSuggestedPack(m_selected.name, m_selectedVersion, new ModpacksCH::PackInstallTask(m_selected, m_selectedVersion, this));
m_dialog->setSuggestedPack(m_selected.name, m_selectedVersion, new FTB::PackInstallTask(m_selected, m_selectedVersion, this));
for (auto art : m_selected.art) {
if (art.type == "square") {
auto editedLogoName = "ftb_" + m_selected.safeName;
@ -162,7 +162,7 @@ void FtbPage::onSelectionChanged(QModelIndex first, QModelIndex second)
return;
}
m_selected = m_filterModel->data(first, Qt::UserRole).value<ModpacksCH::Modpack>();
m_selected = m_filterModel->data(first, Qt::UserRole).value<FTB::Modpack>();
QString output = markdownToHTML(m_selected.description.toUtf8());
m_ui->packDescription->setHtml(output);
@ -185,3 +185,13 @@ void FtbPage::onVersionSelectionChanged(QString data)
m_selectedVersion = data;
suggestCurrent();
}
QString FtbPage::getSerachTerm() const
{
return m_ui->searchEdit->text();
}
void FtbPage::setSearchTerm(QString term)
{
m_ui->searchEdit->setText(term);
}

View File

@ -43,6 +43,7 @@
#include "Application.h"
#include "tasks/Task.h"
#include "ui/pages/BasePage.h"
#include "ui/pages/modplatform/ModpackProviderBasePage.h"
namespace Ui {
class FtbPage;
@ -50,7 +51,7 @@ class FtbPage;
class NewInstanceDialog;
class FtbPage : public QWidget, public BasePage {
class FtbPage : public QWidget, public ModpackProviderBasePage {
Q_OBJECT
public:
@ -68,6 +69,11 @@ class FtbPage : public QWidget, public BasePage {
bool eventFilter(QObject* watched, QEvent* event) override;
/** Programatically set the term in the search bar. */
virtual void setSearchTerm(QString) override;
/** Get the current term in the search bar. */
[[nodiscard]] virtual QString getSerachTerm() const override;
private:
void suggestCurrent();
@ -84,7 +90,7 @@ class FtbPage : public QWidget, public BasePage {
Ftb::ListModel* m_listModel = nullptr;
Ftb::FilterModel* m_filterModel = nullptr;
ModpacksCH::Modpack m_selected;
FTB::Modpack m_selected;
QString m_selectedVersion;
bool m_initialised{ false };