diff options
author | flow <flowlnlnln@gmail.com> | 2022-10-13 19:57:23 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-12-06 16:54:54 -0300 |
commit | cba2608c1c196c341275b32becc4a7c713e92bbf (patch) | |
tree | c12da115f9ae1d58dbe15745662db45b93536e40 /launcher/ui/pages | |
parent | e5c42f68c2429a924b22dbcfb0df5a497690b805 (diff) | |
download | PrismLauncher-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.cpp | 50 | ||||
-rw-r--r-- | launcher/ui/pages/instance/ManagedPackPage.h | 4 |
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 { |