From bf09295a633704e2dd69b100f80db0c388765903 Mon Sep 17 00:00:00 2001 From: Camila Ayres Date: Wed, 16 Oct 2024 11:43:39 +0200 Subject: [PATCH] Change the list of update channels when server capabilities change. Signed-off-by: Camila Ayres --- src/gui/accountmanager.cpp | 1 + src/gui/accountmanager.h | 1 + src/gui/generalsettings.cpp | 25 ++++++++++++++++--------- src/gui/generalsettings.h | 5 +++++ src/gui/settingsdialog.cpp | 6 ++++-- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index c6102a7d7c..f934e1cdbb 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -670,6 +670,7 @@ void AccountManager::addAccountState(AccountState *const accountState) Q_ASSERT(accountState->account()); QObject::connect(accountState->account().data(), &Account::wantsAccountSaved, this, &AccountManager::saveAccount); + QObject::connect(accountState->account().data(), &Account::capabilitiesChanged, this, &AccountManager::capabilitiesChanged); AccountStatePtr ptr(accountState); _accounts << ptr; diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h index 32b7ca8e40..768f902ef3 100644 --- a/src/gui/accountmanager.h +++ b/src/gui/accountmanager.h @@ -114,6 +114,7 @@ signals: void accountSyncConnectionRemoved(OCC::AccountState *account); void removeAccountFolders(OCC::AccountState *account); void forceLegacyImportChanged(); + void capabilitiesChanged(); private: // saving and loading Account to settings diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index ab28ca1969..264bca62b1 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -244,6 +244,10 @@ GeneralSettings::GeneralSettings(QWidget *parent) // accountAdded means the wizard was finished and the wizard might change some options. connect(AccountManager::instance(), &AccountManager::accountAdded, this, &GeneralSettings::loadMiscSettings); +#if defined(BUILD_UPDATER) + loadUpdateChannelsList(); +#endif + customizeStyle(); } @@ -284,18 +288,21 @@ void GeneralSettings::loadMiscSettings() _ui->stopExistingFolderNowBigSyncCheckBox->setChecked(_ui->existingFolderLimitCheckBox->isChecked() && cfgFile.stopSyncingExistingFoldersOverLimit()); _ui->newExternalStorage->setChecked(cfgFile.confirmExternalStorage()); _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); - -#if defined(BUILD_UPDATER) - const auto validUpdateChannels = cfgFile.validUpdateChannels(); - _ui->updateChannel->clear(); - _ui->updateChannel->addItems(validUpdateChannels); - const auto currentUpdateChannelIndex = validUpdateChannels.indexOf(cfgFile.currentUpdateChannel()); - _ui->updateChannel->setCurrentIndex(currentUpdateChannelIndex != -1? currentUpdateChannelIndex : 0); - connect(_ui->updateChannel, &QComboBox::currentTextChanged, this, &GeneralSettings::slotUpdateChannelChanged); -#endif } #if defined(BUILD_UPDATER) +void GeneralSettings::loadUpdateChannelsList() { + ConfigFile cfgFile; + if (_currentUpdateChannelList != cfgFile.validUpdateChannels()) { + _currentUpdateChannelList = cfgFile.validUpdateChannels(); + _ui->updateChannel->clear(); + _ui->updateChannel->addItems(_currentUpdateChannelList); + const auto currentUpdateChannelIndex = _currentUpdateChannelList.indexOf(cfgFile.currentUpdateChannel()); + _ui->updateChannel->setCurrentIndex(currentUpdateChannelIndex != -1? currentUpdateChannelIndex : 0); + connect(_ui->updateChannel, &QComboBox::currentTextChanged, this, &GeneralSettings::slotUpdateChannelChanged); + } +} + void GeneralSettings::slotUpdateInfo() { ConfigFile config; diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h index 70a726142d..02a8cef3de 100644 --- a/src/gui/generalsettings.h +++ b/src/gui/generalsettings.h @@ -23,6 +23,7 @@ namespace OCC { class IgnoreListEditor; class SyncLogDialog; +class AccountState; namespace Ui { class GeneralSettings; @@ -43,6 +44,9 @@ public: public slots: void slotStyleChanged(); +#if defined(BUILD_UPDATER) + void loadUpdateChannelsList(); +#endif private slots: void saveMiscSettings(); @@ -67,6 +71,7 @@ private: Ui::GeneralSettings *_ui; QPointer _ignoreEditor; bool _currentlyLoading = false; + QStringList _currentUpdateChannelList; }; diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index a59314a15c..bd14bb71b0 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -127,6 +127,8 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) connect(this, &SettingsDialog::styleChanged, generalSettings, &GeneralSettings::slotStyleChanged); + connect(AccountManager::instance(), &AccountManager::accountAdded, generalSettings, &GeneralSettings::loadUpdateChannelsList); + connect(AccountManager::instance(), &AccountManager::capabilitiesChanged, generalSettings, &GeneralSettings::loadUpdateChannelsList); QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); _actionGroup->addAction(networkAction); @@ -137,8 +139,8 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroupWidgets.insert(generalAction, generalSettings); _actionGroupWidgets.insert(networkAction, networkSettings); - foreach(auto ai, AccountManager::instance()->accounts()) { - accountAdded(ai.data()); + foreach(auto account, AccountManager::instance()->accounts()) { + accountAdded(account.data()); } QTimer::singleShot(1, this, &SettingsDialog::showFirstPage);