diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 0f4c21f528..058bdf1d66 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -21,6 +21,7 @@ #include "configfile.h" #include "owncloudsetupwizard.h" #include "accountmanager.h" +#include "guiutility.h" #if defined(BUILD_UPDATER) #include "updater/updater.h" @@ -275,8 +276,13 @@ void GeneralSettings::slotUpdateInfo() connect(_ui->updateButton, &QAbstractButton::clicked, this, &GeneralSettings::slotUpdateCheckNow, Qt::UniqueConnection); connect(_ui->autoCheckForUpdatesCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleAutoUpdateCheck); - QString status = ocupdater->statusString(); + QString status = ocupdater->statusString(OCUpdater::UpdateStatusStringFormat::Html); Theme::replaceLinkColorStringBackgroundAware(status); + + _ui->updateStateLabel->setOpenExternalLinks(false); + connect(_ui->updateStateLabel, &QLabel::linkActivated, this, [](const QString &link) { + Utility::openBrowser(QUrl(link)); + }); _ui->updateStateLabel->setText(status); _ui->restartButton->setVisible(ocupdater->downloadState() == OCUpdater::DownloadComplete); diff --git a/src/gui/updater/ocupdater.cpp b/src/gui/updater/ocupdater.cpp index 684ee2020f..6bcf726d05 100644 --- a/src/gui/updater/ocupdater.cpp +++ b/src/gui/updater/ocupdater.cpp @@ -144,7 +144,7 @@ void OCUpdater::backgroundCheckForUpdate() } } -QString OCUpdater::statusString() const +QString OCUpdater::statusString(UpdateStatusStringFormat format) const { QString updateVersion = _updateInfo.versionString(); @@ -153,12 +153,20 @@ QString OCUpdater::statusString() const return tr("Downloading %1. Please wait …").arg(updateVersion); case DownloadComplete: return tr("%1 available. Restart application to start the update.").arg(updateVersion); - case DownloadFailed: + case DownloadFailed: { + if (format == UpdateStatusStringFormat::Html) { + return tr("Could not download update. Please open %1 to download the update manually.").arg(_updateInfo.web()); + } return tr("Could not download update. Please open %1 to download the update manually.").arg(_updateInfo.web()); + } case DownloadTimedOut: return tr("Could not check for new updates."); - case UpdateOnlyAvailableThroughSystem: + case UpdateOnlyAvailableThroughSystem: { + if (format == UpdateStatusStringFormat::Html) { + return tr("New %1 is available. Please open %2 to download the update.").arg(updateVersion, _updateInfo.web()); + } return tr("New %1 is available. Please open %2 to download the update.").arg(updateVersion, _updateInfo.web()); + } case CheckingServer: return tr("Checking update server …"); case Unknown: diff --git a/src/gui/updater/ocupdater.h b/src/gui/updater/ocupdater.h index dbdb6be517..c6c1ad8dfa 100644 --- a/src/gui/updater/ocupdater.h +++ b/src/gui/updater/ocupdater.h @@ -97,6 +97,11 @@ public: DownloadFailed, DownloadTimedOut, UpdateOnlyAvailableThroughSystem }; + + enum UpdateStatusStringFormat { + PlainText, + Html, + }; explicit OCUpdater(const QUrl &url); void setUpdateUrl(const QUrl &url); @@ -105,7 +110,7 @@ public: void checkForUpdate() override; - QString statusString() const; + QString statusString(UpdateStatusStringFormat format = PlainText) const; int downloadState() const; void setDownloadState(DownloadState state);