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 | |
| 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')
| -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> | 
