diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index 1b255591b2..8be37e45d3 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -42,7 +42,6 @@ constexpr auto serverVersionC = "serverVersion"; constexpr auto serverColorC = "serverColor"; constexpr auto serverTextColorC = "serverTextColor"; constexpr auto skipE2eeMetadataChecksumValidationC = "skipE2eeMetadataChecksumValidation"; -constexpr auto networkProxySettingC = "networkProxySetting"; constexpr auto networkProxyTypeC = "networkProxyType"; constexpr auto networkProxyHostNameC = "networkProxyHostName"; constexpr auto networkProxyPortC = "networkProxyPort"; @@ -118,22 +117,25 @@ AccountManager::AccountsRestoreResult AccountManager::restore(const bool alsoRes for (const auto &accountId : settingsChildGroups) { settings->beginGroup(accountId); if (!skipSettingsKeys.contains(settings->group())) { - if (const auto acc = loadAccountHelper(*settings)) { - acc->_id = accountId; - const auto accState = new AccountState(acc); - const auto jar = qobject_cast(acc->_networkAccessManager->cookieJar()); - Q_ASSERT(jar); - if (jar) { - jar->restore(acc->cookieJarPath()); - } - addAccountState(accState); + const auto acc = loadAccountHelper(*settings); + if (!acc) { + continue; } + acc->_id = accountId; + const auto accState = new AccountState(acc); + const auto jar = qobject_cast(acc->_networkAccessManager->cookieJar()); + Q_ASSERT(jar); + if (jar) { + jar->restore(acc->cookieJarPath()); + } + addAccountState(accState); + settings->endGroup(); + moveNetworkSettingsFromGlobalToAccount(acc); } else { qCInfo(lcAccountManager) << "Account" << accountId << "is too new, ignoring"; _additionalBlockedAccountIds.insert(accountId); result = AccountsRestoreSuccessWithSkipped; } - settings->endGroup(); } return result; @@ -265,10 +267,13 @@ bool AccountManager::restoreFromLegacySettings() const auto childGroups = settings->childGroups(); for (const auto &accountId : childGroups) { settings->beginGroup(accountId); - if (const auto acc = loadAccountHelper(*settings)) { - addAccount(acc); + const auto acc = loadAccountHelper(*settings); + if (!acc) { + continue; } + addAccount(acc); settings->endGroup(); + moveNetworkSettingsFromGlobalToAccount(acc); } return true; } @@ -336,7 +341,7 @@ void AccountManager::saveAccountHelper(const AccountPtr &account, QSettings &set } else { settings.setValue(QLatin1String(skipE2eeMetadataChecksumValidationC), account->_skipE2eeMetadataChecksumValidation); } - settings.setValue(networkProxySettingC, static_cast>(account->networkProxySetting())); + settings.setValue(networkProxyTypeC, account->proxyType()); settings.setValue(networkProxyHostNameC, account->proxyHostName()); settings.setValue(networkProxyPortC, account->proxyPort()); @@ -427,6 +432,34 @@ void AccountManager::saveAccountHelper(const AccountPtr &account, QSettings &set } } +void AccountManager::moveNetworkSettingsFromGlobalToAccount(const AccountPtr &account) +{ + ConfigFile configFile; + const auto hostname = configFile.proxyHostName(); + + if (!hostname.isEmpty()) { + account->setProxySettings(static_cast(configFile.proxyType()), + hostname, + configFile.proxyPort(), + configFile.proxyNeedsAuth(), + configFile.proxyUser(), + configFile.proxyPassword()); + ClientProxy().cleanupGlobalNetworkConfiguration(); + } + + const auto useUploadLimit = configFile.useUploadLimit(); + const auto useDownloadLimit = configFile.useDownloadLimit(); + if (useUploadLimit == 0 && useDownloadLimit == 0) { + return; + } + + account->setUploadLimitSetting(static_cast(useUploadLimit)); + account->setUploadLimit(configFile.uploadLimit()); + account->setDownloadLimitSetting(static_cast(useDownloadLimit)); + account->setDownloadLimit(configFile.downloadLimit()); + configFile.cleanupGlobalNetworkConfiguration(); +} + AccountPtr AccountManager::loadAccountHelper(QSettings &settings) { const auto urlConfig = settings.value(QLatin1String(urlC)); @@ -500,8 +533,6 @@ AccountPtr AccountManager::loadAccountHelper(QSettings &settings) } acc->setCredentials(CredentialsFactory::create(authType)); - - acc->setNetworkProxySetting(settings.value(networkProxySettingC).value()); acc->setProxyType(settings.value(networkProxyTypeC).value()); acc->setProxyHostName(settings.value(networkProxyHostNameC).toString()); acc->setProxyPort(settings.value(networkProxyPortC).toInt()); @@ -510,13 +541,14 @@ AccountPtr AccountManager::loadAccountHelper(QSettings &settings) acc->setUploadLimitSetting( settings.value( networkUploadLimitSettingC, - QVariant::fromValue(Account::AccountNetworkTransferLimitSetting::GlobalLimit) + QVariant::fromValue(Account::AccountNetworkTransferLimitSetting::NoLimit) ).value()); acc->setDownloadLimitSetting( settings.value( networkDownloadLimitSettingC, - QVariant::fromValue(Account::AccountNetworkTransferLimitSetting::GlobalLimit) + QVariant::fromValue(Account::AccountNetworkTransferLimitSetting::NoLimit) ).value()); + acc->setUploadLimit(settings.value(networkUploadLimitC).toInt()); acc->setDownloadLimit(settings.value(networkDownloadLimitC).toInt()); diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h index 9c965e497a..acbae0b859 100644 --- a/src/gui/accountmanager.h +++ b/src/gui/accountmanager.h @@ -112,6 +112,7 @@ private: // saving and loading Account to settings void saveAccountHelper(const AccountPtr &account, QSettings &settings, bool saveCredentials = true); AccountPtr loadAccountHelper(QSettings &settings); + void moveNetworkSettingsFromGlobalToAccount(const AccountPtr &account); bool restoreFromLegacySettings(); diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 38dac21532..995def590b 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -293,7 +293,7 @@ Application::Application(int &argc, char **argv) ConfigFile().setProxyType(QNetworkProxy::NoProxy); for (const auto &accountState : AccountManager::instance()->accounts()) { if (accountState && accountState->account()) { - accountState->account()->setNetworkProxySetting(Account::AccountNetworkProxySetting::GlobalProxy); + accountState->account()->setProxyType(QNetworkProxy::NoProxy); } } } @@ -397,6 +397,15 @@ Application::Application(int &argc, char **argv) _gui->setupCloudProviders(); #endif + if (_theme->doNotUseProxy()) { + ConfigFile().setProxyType(QNetworkProxy::NoProxy); + for (const auto &accountState : AccountManager::instance()->accounts()) { + if (accountState && accountState->account()) { + accountState->account()->setProxyType(QNetworkProxy::NoProxy); + } + } + } + _proxy.setupQtProxyFromConfig(); // folders have to be defined first, than we set up the Qt proxy. connect(AccountManager::instance(), &AccountManager::accountAdded, diff --git a/src/gui/connectionvalidator.cpp b/src/gui/connectionvalidator.cpp index dd353ab801..200d4acaab 100644 --- a/src/gui/connectionvalidator.cpp +++ b/src/gui/connectionvalidator.cpp @@ -52,8 +52,7 @@ void ConnectionValidator::checkServerAndAuth() _isCheckingServerAndAuth = true; // Lookup system proxy in a thread https://github.com/owncloud/client/issues/2993 - if ((ClientProxy::isUsingSystemDefault() && _account->networkProxySetting() == Account::AccountNetworkProxySetting::GlobalProxy) - || _account->proxyType() == QNetworkProxy::DefaultProxy) { + if (ClientProxy::isUsingSystemDefault() || _account->proxyType() == QNetworkProxy::DefaultProxy) { qCDebug(lcConnectionValidator) << "Trying to look up system proxy"; ClientProxy::lookupSystemProxyAsync(_account->url(), this, SLOT(systemProxyLookupDone(QNetworkProxy))); } else { diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 455f2ff45d..64bb8b552c 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -1202,27 +1202,21 @@ SyncOptions Folder::initializeSyncOptions() const void Folder::setDirtyNetworkLimits() { const auto account = _accountState->account(); - const auto useGlobalDown = account->downloadLimitSetting() == Account::AccountNetworkTransferLimitSetting::GlobalLimit; - const auto useGlobalUp = account->uploadLimitSetting() == Account::AccountNetworkTransferLimitSetting::GlobalLimit; ConfigFile cfg; int downloadLimit = -75; // 75% - const auto useDownLimit = useGlobalDown - ? cfg.useDownloadLimit() - : static_cast>(account->downloadLimitSetting()); + const auto useDownLimit = static_cast>(account->downloadLimitSetting()); if (useDownLimit >= 1) { - downloadLimit = useGlobalDown ? cfg.downloadLimit() * 1000 : account->downloadLimit() * 1000; + downloadLimit = account->downloadLimit() * 1000; } else if (useDownLimit == 0) { downloadLimit = 0; } int uploadLimit = -75; // 75% - const auto useUpLimit = useGlobalUp - ? cfg.useUploadLimit() - : static_cast>(account->uploadLimitSetting()); + const auto useUpLimit = static_cast>(account->uploadLimitSetting()); if (useUpLimit >= 1) { - uploadLimit = useGlobalUp ? cfg.uploadLimit() * 1000 : account->uploadLimit() * 1000; + uploadLimit = account->uploadLimit() * 1000; } else if (useUpLimit == 0) { uploadLimit = 0; } diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index cbfba8591b..ce4c25e7b6 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -1567,11 +1567,10 @@ void FolderMan::setDirtyProxy() if (folder && folder->accountState() && folder->accountState()->account() - && folder->accountState()->account()->networkAccessManager() - && folder->accountState()->account()->networkProxySetting() == Account::AccountNetworkProxySetting::GlobalProxy) { + && folder->accountState()->account()->networkAccessManager()) { // Need to do this so we do not use the old determined system proxy const auto proxy = QNetworkProxy(QNetworkProxy::DefaultProxy); - folder->accountState()->account()->networkAccessManager()->setProxy(proxy); + folder->accountState()->account()->setProxyType(proxy.type()); } } } diff --git a/src/gui/networksettings.cpp b/src/gui/networksettings.cpp index 30db508d5a..eb73c7f4c3 100644 --- a/src/gui/networksettings.cpp +++ b/src/gui/networksettings.cpp @@ -32,12 +32,6 @@ NetworkSettings::NetworkSettings(const AccountPtr &account, QWidget *parent) _ui->proxyGroupBox->setVisible(!Theme::instance()->doNotUseProxy()); - if (!account) { - _ui->globalProxySettingsRadioButton->setVisible(false); - _ui->globalDownloadSettingsRadioButton->setVisible(false); - _ui->globalUploadSettingsRadioButton->setVisible(false); - } - if (!Theme::instance()->doNotUseProxy()) { _ui->hostLineEdit->setPlaceholderText(tr("Hostname of proxy server")); _ui->userLineEdit->setPlaceholderText(tr("Username for proxy server")); @@ -83,11 +77,9 @@ NetworkSettings::NetworkSettings(const AccountPtr &account, QWidget *parent) _ui->uploadSpinBox->setVisible(_ui->uploadLimitRadioButton->isChecked()); _ui->uploadSpinBoxLabel->setVisible(_ui->uploadLimitRadioButton->isChecked()); - connect(_ui->globalUploadSettingsRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->uploadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->noUploadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->autoUploadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); - connect(_ui->globalDownloadSettingsRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->downloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->noDownloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->autoDownloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); @@ -116,34 +108,28 @@ void NetworkSettings::loadProxySettings() return; } - const auto useGlobalProxy = !_account || _account->networkProxySetting() == Account::AccountNetworkProxySetting::GlobalProxy; - const auto cfgFile = ConfigFile(); - const auto proxyType = useGlobalProxy ? cfgFile.proxyType() : _account->proxyType(); - const auto proxyPort = useGlobalProxy ? cfgFile.proxyPort() : _account->proxyPort(); - const auto proxyHostName = useGlobalProxy ? cfgFile.proxyHostName() : _account->proxyHostName(); - const auto proxyNeedsAuth = useGlobalProxy ? cfgFile.proxyNeedsAuth() : _account->proxyNeedsAuth(); - const auto proxyUser = useGlobalProxy ? cfgFile.proxyUser() : _account->proxyUser(); - const auto proxyPassword = useGlobalProxy ? cfgFile.proxyPassword() : _account->proxyPassword(); + const auto proxyType = _account->proxyType(); + const auto proxyPort = _account->proxyPort(); + const auto proxyHostName = _account->proxyHostName(); + const auto proxyNeedsAuth = _account->proxyNeedsAuth(); + const auto proxyUser = _account->proxyUser(); + const auto proxyPassword = _account->proxyPassword(); // load current proxy settings - if (_account && _account->networkProxySetting() == Account::AccountNetworkProxySetting::GlobalProxy) { - _ui->globalProxySettingsRadioButton->setChecked(true); - } else { - switch (proxyType) { - case QNetworkProxy::NoProxy: - _ui->noProxyRadioButton->setChecked(true); - break; - case QNetworkProxy::DefaultProxy: - _ui->systemProxyRadioButton->setChecked(true); - break; - case QNetworkProxy::Socks5Proxy: - case QNetworkProxy::HttpProxy: - _ui->typeComboBox->setCurrentIndex(_ui->typeComboBox->findData(proxyType)); - _ui->manualProxyRadioButton->setChecked(true); - break; - default: - break; - } + switch (proxyType) { + case QNetworkProxy::NoProxy: + _ui->noProxyRadioButton->setChecked(true); + break; + case QNetworkProxy::DefaultProxy: + _ui->systemProxyRadioButton->setChecked(true); + break; + case QNetworkProxy::Socks5Proxy: + case QNetworkProxy::HttpProxy: + _ui->typeComboBox->setCurrentIndex(_ui->typeComboBox->findData(proxyType)); + _ui->manualProxyRadioButton->setChecked(true); + break; + default: + break; } _ui->hostLineEdit->setText(proxyHostName); @@ -155,16 +141,12 @@ void NetworkSettings::loadProxySettings() void NetworkSettings::loadBWLimitSettings() { - const auto useGlobalLimit = !_account || _account->downloadLimitSetting() == Account::AccountNetworkTransferLimitSetting::GlobalLimit; - const auto cfgFile = ConfigFile(); - const auto useDownloadLimit = useGlobalLimit ? cfgFile.useDownloadLimit() : static_cast>(_account->downloadLimitSetting()); - const auto downloadLimit = useGlobalLimit ? cfgFile.downloadLimit() : _account->downloadLimit(); - const auto useUploadLimit = useGlobalLimit ? cfgFile.useUploadLimit() : static_cast>(_account->uploadLimitSetting()); - const auto uploadLimit = useGlobalLimit ? cfgFile.uploadLimit() : _account->uploadLimit(); + const auto useDownloadLimit = static_cast>(_account->downloadLimitSetting()); + const auto downloadLimit = _account->downloadLimit(); + const auto useUploadLimit = static_cast>(_account->uploadLimitSetting()); + const auto uploadLimit = _account->uploadLimit(); - if (_account && _account->downloadLimitSetting() == Account::AccountNetworkTransferLimitSetting::GlobalLimit) { - _ui->globalDownloadSettingsRadioButton->setChecked(true); - } else if (useDownloadLimit >= 1) { + if (useDownloadLimit >= 1) { _ui->downloadLimitRadioButton->setChecked(true); } else if (useDownloadLimit == 0) { _ui->noDownloadLimitRadioButton->setChecked(true); @@ -173,9 +155,7 @@ void NetworkSettings::loadBWLimitSettings() } _ui->downloadSpinBox->setValue(downloadLimit); - if (_account && _account->uploadLimitSetting() == Account::AccountNetworkTransferLimitSetting::GlobalLimit) { - _ui->globalUploadSettingsRadioButton->setChecked(true); - } else if (useUploadLimit >= 1) { + if (useUploadLimit >= 1) { _ui->uploadLimitRadioButton->setChecked(true); } else if (useUploadLimit == 0) { _ui->noUploadLimitRadioButton->setChecked(true); @@ -189,7 +169,6 @@ void NetworkSettings::saveProxySettings() { checkEmptyProxyHost(); - const auto useGlobalProxy = _ui->globalProxySettingsRadioButton->isChecked(); const auto user = _ui->userLineEdit->text(); const auto password = _ui->passwordLineEdit->text(); const auto host = _ui->hostLineEdit->text(); @@ -210,27 +189,10 @@ void NetworkSettings::saveProxySettings() } if (_account) { // We must be setting up network proxy for a specific account - const auto proxySetting = useGlobalProxy ? Account::AccountNetworkProxySetting::GlobalProxy : Account::AccountNetworkProxySetting::AccountSpecificProxy; - _account->setProxySettings(proxySetting, proxyType, host, port, needsAuth, user, password); + _account->setProxySettings(proxyType, host, port, needsAuth, user, password); const auto accountState = AccountManager::instance()->accountFromUserId(_account->userIdAtHostWithPort()); accountState->freshConnectionAttempt(); AccountManager::instance()->saveAccount(_account); - } else { - ConfigFile().setProxyType(proxyType, host, port, needsAuth, user, password); - ClientProxy proxy; - proxy.setupQtProxyFromConfig(); // Refresh the Qt proxy settings as the - // quota check can happen all the time. - - // ...and set the folders dirty, they refresh their proxy next time they - // start the sync. - FolderMan::instance()->setDirtyProxy(); - - const auto accounts = AccountManager::instance()->accounts(); - for (const auto &accountState : accounts) { - if (accountState->account()->networkProxySetting() == Account::AccountNetworkProxySetting::GlobalProxy) { - accountState->freshConnectionAttempt(); - } - } } } @@ -248,7 +210,7 @@ void NetworkSettings::saveBWLimitSettings() useDownloadLimit = 0; } else if (_ui->autoDownloadLimitRadioButton->isChecked()) { useDownloadLimit = -1; - } else if (_account && _ui->globalDownloadSettingsRadioButton->isChecked()) { + } else if (_account) { useDownloadLimit = -2; } @@ -258,7 +220,7 @@ void NetworkSettings::saveBWLimitSettings() useUploadLimit = 0; } else if (_ui->autoUploadLimitRadioButton->isChecked()) { useUploadLimit = -1; - } else if (_account && _ui->globalUploadSettingsRadioButton->isChecked()) { + } else if (_account) { useUploadLimit = -2; } @@ -268,12 +230,6 @@ void NetworkSettings::saveBWLimitSettings() _account->setUploadLimitSetting(static_cast(useUploadLimit)); _account->setUploadLimit(uploadLimit); AccountManager::instance()->saveAccount(_account); - } else { - ConfigFile cfg; - cfg.setUseDownloadLimit(useDownloadLimit); - cfg.setUseUploadLimit(useUploadLimit); - cfg.setDownloadLimit(downloadLimit); - cfg.setUploadLimit(uploadLimit); } FolderMan::instance()->setDirtyNetworkLimits(_account); diff --git a/src/gui/networksettings.ui b/src/gui/networksettings.ui index e8ee66ad60..068cc6e896 100644 --- a/src/gui/networksettings.ui +++ b/src/gui/networksettings.ui @@ -45,7 +45,33 @@ Proxy Settings - + + + + No proxy + + + true + + + proxyButtonGroup + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + Use system proxy @@ -55,7 +81,7 @@ - + @@ -90,7 +116,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -211,7 +237,7 @@ - QLineEdit::Password + QLineEdit::EchoMode::Password @@ -231,7 +257,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -243,7 +269,7 @@ - + Manually specify proxy @@ -253,42 +279,6 @@ - - - - No proxy - - - true - - - proxyButtonGroup - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Use global settings - - - proxyButtonGroup - - - @@ -312,7 +302,7 @@ Download Bandwidth - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop @@ -324,7 +314,14 @@ 6 - + + + + Limit to + + + + No limit @@ -334,7 +331,17 @@ - + + + + Limit to 3/4 of estimated bandwidth + + + Limit automatically + + + + @@ -364,10 +371,10 @@ - + - Qt::Vertical + Qt::Orientation::Vertical @@ -377,30 +384,6 @@ - - - - Limit to - - - - - - - Limit to 3/4 of estimated bandwidth - - - Limit automatically - - - - - - - Use global settings - - - @@ -416,7 +399,7 @@ Upload Bandwidth - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop false @@ -431,47 +414,7 @@ 6 - - - - Limit to 3/4 of estimated bandwidth - - - Limit automatically - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - Limit to - - - - - - - No limit - - - true - - - - @@ -504,19 +447,51 @@ - - + + - Use global settings + Limit to + + + + Limit to 3/4 of estimated bandwidth + + + Limit automatically + + + + + + + No limit + + + true + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + autoUploadLimitRadioButton uploadLimitRadioButton noUploadLimitRadioButton verticalSpacer_3 - globalUploadSettingsRadioButton diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 899cdda8f9..8a26899e54 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -178,8 +178,7 @@ void OwncloudSetupWizard::slotCheckServer(const QString &urlString) account->networkAccessManager()->clearAccessCache(); // Lookup system proxy in a thread https://github.com/owncloud/client/issues/2993 - if ((ClientProxy::isUsingSystemDefault() && account->networkProxySetting() == Account::AccountNetworkProxySetting::GlobalProxy) - || account->proxyType() == QNetworkProxy::DefaultProxy) { + if (ClientProxy::isUsingSystemDefault() || account->proxyType() == QNetworkProxy::DefaultProxy) { qCDebug(lcWizard) << "Trying to look up system proxy"; ClientProxy::lookupSystemProxyAsync(account->url(), this, SLOT(slotSystemProxyLookupDone(QNetworkProxy))); } else { diff --git a/src/gui/proxyauthhandler.cpp b/src/gui/proxyauthhandler.cpp index 738ead53c8..6b1fce1c9a 100644 --- a/src/gui/proxyauthhandler.cpp +++ b/src/gui/proxyauthhandler.cpp @@ -62,8 +62,7 @@ void ProxyAuthHandler::handleProxyAuthenticationRequired( // If the user explicitly configured the proxy in the // network settings, don't ask about it. - if ((account && (account->networkProxySetting() == Account::AccountNetworkProxySetting::GlobalProxy - || account->proxyType() == QNetworkProxy::HttpProxy + if ((account && (account->proxyType() == QNetworkProxy::HttpProxy || account->proxyType() == QNetworkProxy::Socks5Proxy)) || _configFile->proxyType() == QNetworkProxy::HttpProxy || _configFile->proxyType() == QNetworkProxy::Socks5Proxy) { diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index d3ba1f53a5..d940702117 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -126,14 +126,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) connect(AccountManager::instance(), &AccountManager::capabilitiesChanged, generalSettings, &GeneralSettings::loadUpdateChannelsList); #endif - QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); - _actionGroup->addAction(networkAction); - _toolBar->addAction(networkAction); - auto *networkSettings = new NetworkSettings; - _ui->stack->addWidget(networkSettings); - _actionGroupWidgets.insert(generalAction, generalSettings); - _actionGroupWidgets.insert(networkAction, networkSettings); const auto accountsList = AccountManager::instance()->accounts(); for (const auto &account : accountsList) { diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index d173a428b5..b957894bfe 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -1169,38 +1169,6 @@ void Account::updateDesktopEnterpriseChannel() } } -Account::AccountNetworkProxySetting Account::networkProxySetting() const -{ - return _networkProxySetting; -} - -void Account::setNetworkProxySetting(const AccountNetworkProxySetting setting) -{ - if (setting == _networkProxySetting) { - return; - } - - _networkProxySetting = setting; - if (setting == AccountNetworkProxySetting::AccountSpecificProxy) { - auto proxy = _networkAccessManager->proxy(); - proxy.setType(proxyType()); - proxy.setHostName(proxyHostName()); - proxy.setPort(proxyPort()); - proxy.setUser(proxyUser()); - proxy.setPassword(proxyPassword()); - _networkAccessManager->setProxy(proxy); - } else { - const auto proxy = QNetworkProxy::applicationProxy(); - _networkAccessManager->setProxy(proxy); - setProxyType(proxy.type()); - setProxyHostName(proxy.hostName()); - setProxyPort(proxy.port()); - setProxyUser(proxy.user()); - setProxyPassword(proxy.password()); - } - emit networkProxySettingChanged(); -} - QNetworkProxy::ProxyType Account::proxyType() const { return _proxyType; @@ -1214,11 +1182,13 @@ void Account::setProxyType(QNetworkProxy::ProxyType proxyType) _proxyType = proxyType; - if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) { - auto proxy = _networkAccessManager->proxy(); - proxy.setType(proxyType); - _networkAccessManager->setProxy(proxy); - } + auto proxy = _networkAccessManager->proxy(); + proxy.setType(proxyType); + proxy.setHostName(proxyHostName()); + proxy.setPort(proxyPort()); + proxy.setUser(proxyUser()); + proxy.setPassword(proxyPassword()); + _networkAccessManager->setProxy(proxy); emit proxyTypeChanged(); } @@ -1236,11 +1206,9 @@ void Account::setProxyHostName(const QString &hostName) _proxyHostName = hostName; - if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) { - auto proxy = _networkAccessManager->proxy(); - proxy.setHostName(hostName); - _networkAccessManager->setProxy(proxy); - } + auto proxy = _networkAccessManager->proxy(); + proxy.setHostName(hostName); + _networkAccessManager->setProxy(proxy); emit proxyHostNameChanged(); } @@ -1258,11 +1226,9 @@ void Account::setProxyPort(const int port) _proxyPort = port; - if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) { - auto proxy = _networkAccessManager->proxy(); - proxy.setPort(port); - _networkAccessManager->setProxy(proxy); - } + auto proxy = _networkAccessManager->proxy(); + proxy.setPort(port); + _networkAccessManager->setProxy(proxy); emit proxyPortChanged(); } @@ -1295,11 +1261,9 @@ void Account::setProxyUser(const QString &user) _proxyUser = user; - if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) { - auto proxy = _networkAccessManager->proxy(); - proxy.setUser(user); - _networkAccessManager->setProxy(proxy); - } + auto proxy = _networkAccessManager->proxy(); + proxy.setUser(user); + _networkAccessManager->setProxy(proxy); emit proxyUserChanged(); } @@ -1317,35 +1281,26 @@ void Account::setProxyPassword(const QString &password) _proxyPassword = password; - if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) { - auto proxy = _networkAccessManager->proxy(); - proxy.setPassword(password); - _networkAccessManager->setProxy(proxy); - } + auto proxy = _networkAccessManager->proxy(); + proxy.setPassword(password); + _networkAccessManager->setProxy(proxy); emit proxyPasswordChanged(); } -void Account::setProxySettings(const AccountNetworkProxySetting networkProxySetting, - const QNetworkProxy::ProxyType proxyType, +void Account::setProxySettings(const QNetworkProxy::ProxyType proxyType, const QString &hostName, const int port, const bool needsAuth, const QString &user, const QString &password) { - if (networkProxySetting == AccountNetworkProxySetting::GlobalProxy) { - setNetworkProxySetting(networkProxySetting); - return; - } - setProxyType(proxyType); setProxyHostName(hostName); setProxyPort(port); setProxyNeedsAuth(needsAuth); setProxyUser(user); setProxyPassword(password); - setNetworkProxySetting(networkProxySetting); } Account::AccountNetworkTransferLimitSetting Account::uploadLimitSetting() const diff --git a/src/libsync/account.h b/src/libsync/account.h index eaa636b3ad..0e1b38d8cd 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -82,7 +82,6 @@ class OWNCLOUDSYNC_EXPORT Account : public QObject Q_PROPERTY(QUrl url MEMBER _url) Q_PROPERTY(bool e2eEncryptionKeysGenerationAllowed MEMBER _e2eEncryptionKeysGenerationAllowed) Q_PROPERTY(bool askUserForMnemonic READ askUserForMnemonic WRITE setAskUserForMnemonic NOTIFY askUserForMnemonicChanged) - Q_PROPERTY(AccountNetworkProxySetting networkProxySetting READ networkProxySetting WRITE setNetworkProxySetting NOTIFY networkProxySettingChanged) Q_PROPERTY(QNetworkProxy::ProxyType proxyType READ proxyType WRITE setProxyType NOTIFY proxyTypeChanged) Q_PROPERTY(QString proxyHostName READ proxyHostName WRITE setProxyHostName NOTIFY proxyHostNameChanged) Q_PROPERTY(int proxyPort READ proxyPort WRITE setProxyPort NOTIFY proxyPortChanged) @@ -98,17 +97,8 @@ class OWNCLOUDSYNC_EXPORT Account : public QObject Q_PROPERTY(QByteArray encryptionCertificateFingerprint READ encryptionCertificateFingerprint WRITE setEncryptionCertificateFingerprint NOTIFY encryptionCertificateFingerprintChanged) public: - // We need to decide whether to use the client's global proxy settings or whether to use - // a specific setting for each account. Hence this enum - enum class AccountNetworkProxySetting { - GlobalProxy = 0, - AccountSpecificProxy, - }; - Q_ENUM(AccountNetworkProxySetting) - enum class AccountNetworkTransferLimitSetting { - GlobalLimit = -2, - AutoLimit, // Value under 0 is interpreted as auto in general + AutoLimit = -1, // Value under 0 is interpreted as auto in general NoLimit, ManualLimit, }; @@ -366,9 +356,6 @@ public: void updateDesktopEnterpriseChannel(); // Network-related settings - [[nodiscard]] AccountNetworkProxySetting networkProxySetting() const; - void setNetworkProxySetting(AccountNetworkProxySetting networkProxySetting); - [[nodiscard]] QNetworkProxy::ProxyType proxyType() const; void setProxyType(QNetworkProxy::ProxyType proxyType); @@ -387,8 +374,7 @@ public: [[nodiscard]] QString proxyPassword() const; void setProxyPassword(const QString &password); - void setProxySettings(const AccountNetworkProxySetting networkProxySetting, - const QNetworkProxy::ProxyType proxyType, + void setProxySettings(const QNetworkProxy::ProxyType proxyType, const QString &proxyHostName, const int proxyPort, const bool proxyNeedsAuth, @@ -558,15 +544,14 @@ private: QHash> _lockStatusChangeInprogress; - AccountNetworkProxySetting _networkProxySetting = AccountNetworkProxySetting::GlobalProxy; QNetworkProxy::ProxyType _proxyType = QNetworkProxy::NoProxy; QString _proxyHostName; int _proxyPort = 0; bool _proxyNeedsAuth = false; QString _proxyUser; QString _proxyPassword; - AccountNetworkTransferLimitSetting _uploadLimitSetting = AccountNetworkTransferLimitSetting::GlobalLimit; - AccountNetworkTransferLimitSetting _downloadLimitSetting = AccountNetworkTransferLimitSetting::GlobalLimit; + AccountNetworkTransferLimitSetting _uploadLimitSetting = AccountNetworkTransferLimitSetting::NoLimit; + AccountNetworkTransferLimitSetting _downloadLimitSetting = AccountNetworkTransferLimitSetting::NoLimit; unsigned int _uploadLimit = 0; unsigned int _downloadLimit = 0; bool _serverHasValidSubscription = false; diff --git a/src/libsync/clientproxy.cpp b/src/libsync/clientproxy.cpp index fc543a3258..c44354bb5a 100644 --- a/src/libsync/clientproxy.cpp +++ b/src/libsync/clientproxy.cpp @@ -5,8 +5,8 @@ */ #include "clientproxy.h" - #include "configfile.h" + #include #include #include @@ -147,6 +147,19 @@ void ClientProxy::saveProxyConfigurationFromSettings(const QSettings &settings) settings.value(QLatin1String(proxyPassC)).toString()); } +void ClientProxy::cleanupGlobalNetworkConfiguration() +{ + OCC::ConfigFile configFile; + QSettings settings(configFile.configFile(), QSettings::IniFormat); + settings.remove(proxyTypeC); + settings.remove(proxyHostC); + settings.remove(proxyPortC); + settings.remove(proxyUserC); + settings.remove(proxyPassC); + settings.remove(proxyNeedsAuthC); + settings.sync(); +} + void ClientProxy::lookupSystemProxyAsync(const QUrl &url, QObject *dst, const char *slot) { auto *runnable = new SystemProxyRunnable(url); diff --git a/src/libsync/clientproxy.h b/src/libsync/clientproxy.h index 616b844c19..84b6fea17d 100644 --- a/src/libsync/clientproxy.h +++ b/src/libsync/clientproxy.h @@ -15,6 +15,7 @@ #include #include "common/utility.h" #include "owncloudlib.h" +#include "account.h" namespace OCC { @@ -39,6 +40,7 @@ public: public slots: void setupQtProxyFromConfig(); void saveProxyConfigurationFromSettings(const QSettings &settings); + void cleanupGlobalNetworkConfiguration(); }; class OWNCLOUDSYNC_EXPORT SystemProxyRunnable : public QObject, public QRunnable diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index a1eed97c33..1189af3379 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -448,6 +448,16 @@ void OCC::ConfigFile::cleanUpdaterConfiguration() settings.sync(); } +void OCC::ConfigFile::cleanupGlobalNetworkConfiguration() +{ + QSettings settings(configFile(), QSettings::IniFormat); + settings.remove(useUploadLimitC); + settings.remove(useDownloadLimitC); + settings.remove(uploadLimitC); + settings.remove(downloadLimitC); + settings.sync(); +} + QString ConfigFile::backup(const QString &fileName) const { const QString baseFilePath = configPath() + fileName; diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h index 28fe084032..b5e67561ef 100644 --- a/src/libsync/configfile.h +++ b/src/libsync/configfile.h @@ -41,6 +41,7 @@ public: static QString excludeFileFromSystem(); // doesn't access config dir void cleanUpdaterConfiguration(); + void cleanupGlobalNetworkConfiguration(); /** * Creates a backup of any given fileName in the config folder