diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index 57dfd097bb9cf..e091b4de930fa 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -665,6 +665,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 32b7ca8e40aed..768f902ef3c99 100644 --- a/src/gui/accountmanager.h +++ b/src/gui/accountmanager.h @@ -114,6 +114,7 @@ public slots: 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 ab28ca196903f..264bca62b17b6 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 +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); + } } -#if defined(BUILD_UPDATER) void GeneralSettings::slotUpdateInfo() { ConfigFile config; diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h index 70a726142db8b..02a8cef3dedf2 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 @@ class GeneralSettings : public QWidget public slots: void slotStyleChanged(); +#if defined(BUILD_UPDATER) + void loadUpdateChannelsList(); +#endif private slots: void saveMiscSettings(); @@ -67,6 +71,7 @@ private slots: Ui::GeneralSettings *_ui; QPointer _ignoreEditor; bool _currentlyLoading = false; + QStringList _currentUpdateChannelList; }; diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index a59314a15ce73..bd14bb71b043d 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);