Settings: Add warning when switching update channel
authorChristian Kamm <mail@ckamm.de>
Fri, 18 May 2018 12:45:29 +0000 (14:45 +0200)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Wed, 25 Nov 2020 08:39:16 +0000 (09:39 +0100)
src/gui/generalsettings.cpp

index 789bc27b39ba6fbf7fa7582a42c226f6e2bfb6c8..16658f8a34af52fc02883c9af13291bc18d8d4ba 100644 (file)
@@ -45,6 +45,7 @@
 #include <QNetworkProxy>
 #include <QDir>
 #include <QScopedValueRollback>
+#include <QMessageBox>
 
 #include <private/qzipwriter_p.h>
 
@@ -294,18 +295,46 @@ void GeneralSettings::slotUpdateInfo()
 
 void GeneralSettings::slotUpdateChannelChanged(const QString &channel)
 {
-    ConfigFile().setUpdateChannel(channel);
-    auto *updater = qobject_cast<OCUpdater *>(Updater::instance());
-    if (updater) {
-        updater->setUpdateUrl(Updater::updateUrl());
-        updater->checkForUpdate();
-    }
+    if (channel == ConfigFile().updateChannel())
+        return;
+
+    auto msgBox = new QMessageBox(
+        QMessageBox::Warning,
+        tr("Change update channel?"),
+        tr("The update channel determines which client updates will be offered "
+           "for installation. The \"stable\" channel contains only upgrades that "
+           "are considered reliable, while the versions in the \"beta\" channel "
+           "may contain newer features and bugfixes, but have not yet been tested "
+           "thoroughly."
+           "\n\n"
+           "Note that this selects only what pool upgrades are taken from, and that "
+           "there are no downgrades: So going back from the beta channel to "
+           "the stable channel usually cannot be done immediately and means waiting "
+           "for a stable version that is newer than the currently installed beta "
+           "version."),
+        QMessageBox::NoButton,
+        this);
+    msgBox->addButton(tr("Change update channel"), QMessageBox::AcceptRole);
+    msgBox->addButton(tr("Cancel"), QMessageBox::RejectRole);
+    connect(msgBox, &QMessageBox::finished, msgBox, [this, channel, msgBox](int result) {
+        msgBox->deleteLater();
+        if (result == QMessageBox::AcceptRole) {
+            ConfigFile().setUpdateChannel(channel);
+            if (auto updater = qobject_cast<OCUpdater *>(Updater::instance())) {
+                updater->setUpdateUrl(Updater::updateUrl());
+                updater->checkForUpdate();
+            }
 #ifdef Q_OS_MAC
-    else if (auto *updater = qobject_cast<SparkleUpdater *>(Updater::instance())) {
-        updater->setUpdateUrl(Updater::updateUrl());
-        updater->checkForUpdate();
-    }
+            else if (auto updater = qobject_cast<SparkleUpdater *>(Updater::instance())) {
+                updater->setUpdateUrl(Updater::updateUrl());
+                updater->checkForUpdate();
+            }
 #endif
+        } else {
+            _ui->updateChannel->setCurrentText(ConfigFile().updateChannel());
+        }
+    });
+    msgBox->open();
 }
 
 void GeneralSettings::slotUpdateCheckNow()