diff options
author | flow <flowlnlnln@gmail.com> | 2022-11-11 17:44:16 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-12-06 17:00:32 -0300 |
commit | d4979974b4f65d6662557e0415085c90f1ad5a11 (patch) | |
tree | d74932f885d3cb38ebe272ff2aec3997127bda78 /launcher/ui/pages | |
parent | 95392309150079d73f4ee83ea7bdba98ef9caa2f (diff) | |
download | PrismLauncher-d4979974b4f65d6662557e0415085c90f1ad5a11.tar.gz PrismLauncher-d4979974b4f65d6662557e0415085c90f1ad5a11.tar.bz2 PrismLauncher-d4979974b4f65d6662557e0415085c90f1ad5a11.zip |
fix(ManagedPackPage): better UX for when network requests fail / are pending
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/ui/pages')
-rw-r--r-- | launcher/ui/pages/instance/ManagedPackPage.cpp | 34 | ||||
-rw-r--r-- | launcher/ui/pages/instance/ManagedPackPage.h | 14 | ||||
-rw-r--r-- | launcher/ui/pages/instance/ManagedPackPage.ui | 5 |
3 files changed, 50 insertions, 3 deletions
diff --git a/launcher/ui/pages/instance/ManagedPackPage.cpp b/launcher/ui/pages/instance/ManagedPackPage.cpp index 6d051760..be0b2f86 100644 --- a/launcher/ui/pages/instance/ManagedPackPage.cpp +++ b/launcher/ui/pages/instance/ManagedPackPage.cpp @@ -127,6 +127,30 @@ bool ManagedPackPage::runUpdateTask(InstanceTask* task) return task->wasSuccessful(); } +void ManagedPackPage::suggestVersion() +{ + ui->updateButton->setText(tr("Update pack")); + ui->updateButton->setDisabled(false); +} + +void ManagedPackPage::setFailState() +{ + qDebug() << "Setting fail state!"; + + // We block signals here so that suggestVersion() doesn't get called, causing an assertion fail. + ui->versionsComboBox->blockSignals(true); + ui->versionsComboBox->clear(); + ui->versionsComboBox->addItem(tr("Failed to search for available versions."), {}); + ui->versionsComboBox->blockSignals(false); + + ui->changelogTextBrowser->setText(tr("Failed to request changelog data for this modpack.")); + + ui->updateButton->setText(tr("Cannot update!")); + ui->updateButton->setDisabled(true); + + // TODO: Perhaps start a timer here when m_loaded is false to try and reload. +} + ModrinthManagedPackPage::ModrinthManagedPackPage(BaseInstance* inst, InstanceWindow* instance_window, QWidget* parent) : ManagedPackPage(inst, instance_window, parent) { @@ -153,6 +177,9 @@ void ModrinthManagedPackPage::parseManagedPack() qWarning() << "Error while parsing JSON response from Modrinth at " << parse_error.offset << " reason: " << parse_error.errorString(); qWarning() << *response; + + setFailState(); + return; } @@ -161,6 +188,9 @@ void ModrinthManagedPackPage::parseManagedPack() } catch (const JSONValidationError& e) { qDebug() << *response; qWarning() << "Error while reading modrinth modpack version: " << e.cause(); + + setFailState(); + return; } for (auto version : m_pack.versions) { @@ -183,6 +213,8 @@ void ModrinthManagedPackPage::parseManagedPack() m_loaded = true; }); + QObject::connect(netJob, &NetJob::failed, this, &ModrinthManagedPackPage::setFailState); + QObject::connect(netJob, &NetJob::aborted, this, &ModrinthManagedPackPage::setFailState); QObject::connect(netJob, &NetJob::finished, this, [response, netJob] { netJob->deleteLater(); delete response; @@ -202,6 +234,8 @@ void ModrinthManagedPackPage::suggestVersion() HoeDown md_parser; ui->changelogTextBrowser->setHtml(md_parser.process(version.changelog.toUtf8())); + + ManagedPackPage::suggestVersion(); } void ModrinthManagedPackPage::update() diff --git a/launcher/ui/pages/instance/ManagedPackPage.h b/launcher/ui/pages/instance/ManagedPackPage.h index 7ad13533..a81d24f0 100644 --- a/launcher/ui/pages/instance/ManagedPackPage.h +++ b/launcher/ui/pages/instance/ManagedPackPage.h @@ -51,12 +51,22 @@ class ManagedPackPage : public QWidget, public BasePage { void setInstanceWindow(InstanceWindow* window) { m_instance_window = window; } public slots: - /** Gets the current version selection and update the changelog. + /** Gets the current version selection and update the UI, including the update button and the changelog. */ - virtual void suggestVersion() {}; + virtual void suggestVersion(); virtual void update() {}; + protected slots: + /** Does the necessary UI changes for when something failed. + * + * This includes: + * - Setting an appropriate text on the version selector to indicate a fail; + * - Setting an appropriate text on the changelog text browser to indicate a fail; + * - Disable the update button. + */ + void setFailState(); + protected: ManagedPackPage(BaseInstance* inst, InstanceWindow* instance_window, QWidget* parent = nullptr); diff --git a/launcher/ui/pages/instance/ManagedPackPage.ui b/launcher/ui/pages/instance/ManagedPackPage.ui index 3f019606..14009b13 100644 --- a/launcher/ui/pages/instance/ManagedPackPage.ui +++ b/launcher/ui/pages/instance/ManagedPackPage.ui @@ -133,6 +133,9 @@ </item> <item> <widget class="QPushButton" name="updateButton"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -140,7 +143,7 @@ </sizepolicy> </property> <property name="text"> - <string>Update pack</string> + <string>Fetching versions...</string> </property> </widget> </item> |