aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages/modplatform/modrinth
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/ui/pages/modplatform/modrinth')
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp19
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthModel.h10
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp39
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthPage.h5
4 files changed, 32 insertions, 41 deletions
diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp
index 9361546e..0db6aeff 100644
--- a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp
+++ b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp
@@ -1,7 +1,24 @@
#include "ModrinthModel.h"
+#include "modplatform/modrinth/ModrinthPackIndex.h"
+
namespace Modrinth {
-const char* ListModel::sorts[5] { "relevance", "downloads", "follows", "updated", "newest" };
+const char* ListModel::sorts[5]{ "relevance", "downloads", "follows", "updated", "newest" };
+
+void ListModel::loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj)
+{
+ Modrinth::loadIndexedPack(m, obj);
+}
+
+void ListModel::loadIndexedPackVersions(ModPlatform::IndexedPack& m, QJsonArray& arr)
+{
+ Modrinth::loadIndexedPackVersions(m, arr, APPLICATION->network(), m_parent->m_instance);
+};
+
+QJsonArray ListModel::documentToArray(QJsonDocument& obj) const
+{
+ return obj.object().value("hits").toArray();
+}
} // namespace Modrinth
diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h
index 9137190d..de73704c 100644
--- a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h
+++ b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h
@@ -1,7 +1,6 @@
#pragma once
#include "ModrinthPage.h"
-#include "modplatform/modrinth/ModrinthPackIndex.h"
namespace Modrinth {
@@ -13,12 +12,13 @@ class ListModel : public ModPlatform::ListModel {
virtual ~ListModel() = default;
private:
- void loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj) override { Modrinth::loadIndexedPack(m, obj); };
-
- QJsonArray documentToArray(QJsonDocument& obj) const override { return obj.object().value("hits").toArray(); };
+ void loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj) override;
+ void loadIndexedPackVersions(ModPlatform::IndexedPack& m, QJsonArray& arr) override;
+
+ QJsonArray documentToArray(QJsonDocument& obj) const override;
static const char* sorts[5];
- const char** getSorts() const override { return sorts; };
+ inline const char** getSorts() const override { return sorts; };
};
} // namespace Modrinth
diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp
index fa703e38..cf01506e 100644
--- a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp
+++ b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp
@@ -1,15 +1,7 @@
#include "ModrinthPage.h"
#include "ui_ModPage.h"
-#include <QKeyEvent>
-
-#include "Application.h"
-#include "InstanceImportTask.h"
-#include "Json.h"
-#include "ModDownloadTask.h"
#include "ModrinthModel.h"
-#include "minecraft/MinecraftInstance.h"
-#include "minecraft/PackProfile.h"
#include "ui/dialogs/ModDownloadDialog.h"
ModrinthPage::ModrinthPage(ModDownloadDialog* dialog, BaseInstance* instance)
@@ -33,29 +25,12 @@ ModrinthPage::ModrinthPage(ModDownloadDialog* dialog, BaseInstance* instance)
connect(ui->modSelectionButton, &QPushButton::clicked, this, &ModrinthPage::onModSelected);
}
-bool ModrinthPage::shouldDisplay() const { return true; }
-
-void ModrinthPage::onRequestVersionsSucceeded(QJsonDocument& response, QString addonId)
+bool ModrinthPage::validateVersion(ModPlatform::IndexedVersion& ver, QString mineVer, QString loaderVer) const
{
- if (addonId != current.addonId) { return; }
-
- QJsonArray arr = response.array();
- try {
- Modrinth::loadIndexedPackVersions(current, arr, APPLICATION->network(), m_instance);
- } catch (const JSONValidationError& e) {
- qDebug() << response;
- qWarning() << "Error while reading Modrinth mod version: " << e.cause();
- }
- auto packProfile = ((MinecraftInstance*)m_instance)->getPackProfile();
- QString mcVersion = packProfile->getComponentVersion("net.minecraft");
- QString loaderString = (packProfile->getComponentVersion("net.minecraftforge").isEmpty()) ? "fabric" : "forge";
- for (int i = 0; i < current.versions.size(); i++) {
- auto version = current.versions[i];
- if (!version.mcVersion.contains(mcVersion) || !version.loaders.contains(loaderString)) { continue; }
- ui->versionSelectionBox->addItem(version.version, QVariant(i));
- }
- if (ui->versionSelectionBox->count() == 0) { ui->versionSelectionBox->addItem(tr("No Valid Version found !"), QVariant(-1)); }
-
- ui->modSelectionButton->setText(tr("Cannot select invalid version :("));
- updateSelectionButton();
+ return ver.mcVersion.contains(mineVer) && ver.loaders.contains(loaderVer);
}
+
+// I don't know why, but doing this on the parent class makes it so that
+// other mod providers start loading before being selected, at least with
+// my Qt, so we need to implement this in every derived class...
+bool ModrinthPage::shouldDisplay() const { return true; }
diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h
index f6d1eef0..6f387708 100644
--- a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h
+++ b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h
@@ -19,8 +19,7 @@ class ModrinthPage : public ModPage {
inline QString debugName() const override { return tr("Modrinth"); }
inline QString metaEntryBase() const override { return "ModrinthPacks"; };
- bool shouldDisplay() const override;
+ bool validateVersion(ModPlatform::IndexedVersion& ver, QString mineVer, QString loaderVer = "") const override;
- private:
- void onRequestVersionsSucceeded(QJsonDocument&, QString) override;
+ bool shouldDisplay() const override;
};