aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-10-13 19:57:23 -0300
committerflow <flowlnlnln@gmail.com>2022-12-06 16:54:54 -0300
commitcba2608c1c196c341275b32becc4a7c713e92bbf (patch)
treec12da115f9ae1d58dbe15745662db45b93536e40 /launcher/ui/pages
parente5c42f68c2429a924b22dbcfb0df5a497690b805 (diff)
downloadPrismLauncher-cba2608c1c196c341275b32becc4a7c713e92bbf.tar.gz
PrismLauncher-cba2608c1c196c341275b32becc4a7c713e92bbf.tar.bz2
PrismLauncher-cba2608c1c196c341275b32becc4a7c713e92bbf.zip
feat: add logic for the modrinth instance modpack page
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/ui/pages')
-rw-r--r--launcher/ui/pages/instance/ManagedPackPage.cpp50
-rw-r--r--launcher/ui/pages/instance/ManagedPackPage.h4
2 files changed, 54 insertions, 0 deletions
diff --git a/launcher/ui/pages/instance/ManagedPackPage.cpp b/launcher/ui/pages/instance/ManagedPackPage.cpp
index 725f8ce5..ead33136 100644
--- a/launcher/ui/pages/instance/ManagedPackPage.cpp
+++ b/launcher/ui/pages/instance/ManagedPackPage.cpp
@@ -5,6 +5,10 @@
#include <QProxyStyle>
#include "Application.h"
+#include "BuildConfig.h"
+#include "Json.h"
+
+#include "modplatform/modrinth/ModrinthPackManifest.h"
/** This is just to override the combo box popup behavior so that the combo box doesn't take the whole screen.
* ... thanks Qt.
@@ -96,6 +100,48 @@ ModrinthManagedPackPage::ModrinthManagedPackPage(BaseInstance* inst, QWidget* pa
void ModrinthManagedPackPage::parseManagedPack()
{
+ qDebug() << "Parsing Modrinth pack";
+
+ auto netJob = new NetJob(QString("Modrinth::PackVersions(%1)").arg(m_inst->getManagedPackName()), APPLICATION->network());
+ auto response = new QByteArray();
+
+ QString id = m_inst->getManagedPackID();
+
+ netJob->addNetAction(Net::Download::makeByteArray(QString("%1/project/%2/version").arg(BuildConfig.MODRINTH_PROD_URL, id), response));
+
+ QObject::connect(netJob, &NetJob::succeeded, this, [this, response, id] {
+ QJsonParseError parse_error{};
+ QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error);
+ if (parse_error.error != QJsonParseError::NoError) {
+ qWarning() << "Error while parsing JSON response from Modrinth at " << parse_error.offset
+ << " reason: " << parse_error.errorString();
+ qWarning() << *response;
+ return;
+ }
+
+ try {
+ Modrinth::loadIndexedVersions(m_pack, doc);
+ } catch (const JSONValidationError& e) {
+ qDebug() << *response;
+ qWarning() << "Error while reading modrinth modpack version: " << e.cause();
+ }
+
+ for (auto version : m_pack.versions) {
+ if (!version.name.contains(version.version))
+ ui->versionsComboBox->addItem(QString("%1 — %2").arg(version.name, version.version), QVariant(version.id));
+ else
+ ui->versionsComboBox->addItem(version.name, QVariant(version.id));
+ }
+
+ suggestVersion();
+
+ m_loaded = true;
+ });
+ QObject::connect(netJob, &NetJob::finished, this, [response, netJob] {
+ netJob->deleteLater();
+ delete response;
+ });
+ netJob->start();
}
QString ModrinthManagedPackPage::url() const
@@ -105,6 +151,10 @@ QString ModrinthManagedPackPage::url() const
void ModrinthManagedPackPage::suggestVersion()
{
+ auto index = ui->versionsComboBox->currentIndex();
+ auto version = m_pack.versions.at(index);
+
+ ui->changelogTextBrowser->setText(version.changelog);
}
FlameManagedPackPage::FlameManagedPackPage(BaseInstance* inst, QWidget* parent) : ManagedPackPage(inst, parent)
diff --git a/launcher/ui/pages/instance/ManagedPackPage.h b/launcher/ui/pages/instance/ManagedPackPage.h
index be49383c..1a756d33 100644
--- a/launcher/ui/pages/instance/ManagedPackPage.h
+++ b/launcher/ui/pages/instance/ManagedPackPage.h
@@ -81,6 +81,10 @@ class ModrinthManagedPackPage final : public ManagedPackPage {
public slots:
void suggestVersion() override;
+
+ private:
+ Modrinth::Modpack m_pack;
+ ModrinthAPI m_api;
};
class FlameManagedPackPage final : public ManagedPackPage {