diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index 176277ec8be8f..9b8648fd42d28 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -46,6 +46,7 @@ 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"; @@ -139,8 +140,8 @@ AccountManager::AccountsRestoreResult AccountManager::restore(const bool alsoRes jar->restore(acc->cookieJarPath()); } addAccountState(accState); + migrateNetworkSettings(acc, *settings); settings->endGroup(); - moveNetworkSettingsFromGlobalToAccount(acc); } else { qCInfo(lcAccountManager) << "Account" << accountId << "is too new, ignoring"; _additionalBlockedAccountIds.insert(accountId); @@ -294,6 +295,9 @@ bool AccountManager::restoreFromLegacySettings() configFile.setVfsEnabled(settings->value(ConfigFile::isVfsEnabledC, configFile.isVfsEnabled()).toBool()); configFile.setLaunchOnSystemStartup(settings->value(ConfigFile::launchOnSystemStartupC, configFile.launchOnSystemStartup()).toBool()); + const auto useMonoIcons = settings->value(ConfigFile::monoIconsC, configFile.monoIcons()).toBool(); + Theme::instance()->setSystrayUseMonoIcons(useMonoIcons); + configFile.setMonoIcons(useMonoIcons); configFile.setOptionalServerNotifications(settings->value(ConfigFile::optionalServerNotificationsC, configFile.optionalServerNotifications()).toBool()); configFile.setPromptDeleteFiles(settings->value(ConfigFile::promptDeleteC, @@ -320,7 +324,8 @@ bool AccountManager::restoreFromLegacySettings() : ConfigFile::unbrandedAppName; const auto updaterGroupName = QString("%1/%2").arg(previousAppName, ConfigFile::autoUpdateCheckC); configFile.setAutoUpdateCheck(settings->value(updaterGroupName, configFile.autoUpdateCheck()).toBool(), {}); - // Network + + // Global Proxy and Network ClientProxy().saveProxyConfigurationFromSettings(*settings); configFile.setUseUploadLimit(settings->value(ConfigFile::useUploadLimitC, configFile.useUploadLimit()).toInt()); configFile.setUploadLimit(settings->value(ConfigFile::uploadLimitC, configFile.uploadLimit()).toInt()); @@ -339,8 +344,8 @@ bool AccountManager::restoreFromLegacySettings() continue; } addAccount(acc); + migrateNetworkSettings(acc, *settings); settings->endGroup(); - moveNetworkSettingsFromGlobalToAccount(acc); } configFile.cleanupGlobalNetworkConfiguration(); ClientProxy().cleanupGlobalNetworkConfiguration(); @@ -507,30 +512,60 @@ void AccountManager::saveAccountHelper(const AccountPtr &account, QSettings &set } } -void AccountManager::moveNetworkSettingsFromGlobalToAccount(const AccountPtr &account) +void AccountManager::migrateNetworkSettings(const AccountPtr &account, const QSettings &settings) { + // QSettings from old ConfigFile to new ConfigFile to Account + auto accountProxyType = settings.value(networkProxyTypeC).value(); + auto accountProxyHost = settings.value(networkProxyHostNameC).toString(); + auto accountProxyPort = settings.value(networkProxyPortC).toInt(); + auto accountProxyNeedsAuth = settings.value(networkProxyNeedsAuthC).toBool(); + auto accountProxyUser = settings.value(networkProxyUserC).toString(); + + // Override user settings with global settings if user is set to use global settings 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()); - } - - const auto useUploadLimit = configFile.useUploadLimit(); - const auto useDownloadLimit = configFile.useDownloadLimit(); - if (useUploadLimit == 0 && useDownloadLimit == 0) { - return; + auto accountProxySetting = settings.value(networkProxySettingC).toInt(); + if (accountProxySetting == 0 && configFile.isMigrationInProgress()) { + accountProxyType = static_cast(configFile.proxyType()); + accountProxyHost = configFile.proxyHostName(); + accountProxyPort = configFile.proxyPort(); + accountProxyNeedsAuth = configFile.proxyNeedsAuth(); + accountProxyUser = configFile.proxyUser(); + qCInfo(lcAccountManager) << "Account is using global settings:" << accountProxyType; + } + account->setProxyType(accountProxyType); + account->setProxyHostName(accountProxyHost); + account->setProxyPort(accountProxyPort); + account->setProxyNeedsAuth(accountProxyNeedsAuth); + account->setProxyUser(accountProxyUser); + const auto globalUseUploadLimit = static_cast(configFile.useUploadLimit()); + const auto globalUseDownloadLimit = static_cast(configFile.useDownloadLimit()); + // User network settings + auto userUseUploadLimit = static_cast(settings.value(networkUploadLimitSettingC, + QVariant::fromValue(account->uploadLimitSetting())).toInt()); + auto userUploadLimit = settings.value(networkUploadLimitC, account->uploadLimit()).toInt(); + auto userUseDownloadLimit = static_cast(settings.value(networkDownloadLimitSettingC, + QVariant::fromValue(account->downloadLimitSetting())).toInt()); + auto userDownloadLimit = settings.value(networkDownloadLimitC, account->downloadLimit()).toInt(); + if (userUseUploadLimit == Account::AccountNetworkTransferLimitSetting::LegacyGlobalLimit) { + userUseUploadLimit = globalUseUploadLimit; + userUploadLimit = configFile.uploadLimit(); + qCDebug(lcAccountManager) << "Overriding upload limit with global setting:" << userUseUploadLimit + << "- upload limit:" << userUploadLimit; + } + if (userUseDownloadLimit == Account::AccountNetworkTransferLimitSetting::LegacyGlobalLimit) { + userUseDownloadLimit = globalUseDownloadLimit; + userDownloadLimit = configFile.downloadLimit(); + qCDebug(lcAccountManager) << "Overriding download limit with global setting" << userUseDownloadLimit + << "- download limit:" << userDownloadLimit; + } + if (userUseUploadLimit != Account::AccountNetworkTransferLimitSetting::NoLimit) { + account->setUploadLimitSetting(userUseUploadLimit); + account->setUploadLimit(userUploadLimit); + } + if (userUseDownloadLimit != Account::AccountNetworkTransferLimitSetting::NoLimit) { + account->setDownloadLimitSetting(userUseDownloadLimit); + account->setDownloadLimit(userDownloadLimit); } - - account->setUploadLimitSetting(static_cast(useUploadLimit)); - account->setUploadLimit(configFile.uploadLimit()); - account->setDownloadLimitSetting(static_cast(useDownloadLimit)); - account->setDownloadLimit(configFile.downloadLimit()); } AccountPtr AccountManager::loadAccountHelper(QSettings &settings) @@ -606,31 +641,6 @@ AccountPtr AccountManager::loadAccountHelper(QSettings &settings) } acc->setCredentials(CredentialsFactory::create(authType)); - { - auto accountProxyType = settings.value(networkProxyTypeC).value(); - auto accountProxyHost = settings.value(networkProxyHostNameC).toString(); - auto accountProxyPort = settings.value(networkProxyPortC).toInt(); - auto accountProxyNeedsAuth = settings.value(networkProxyNeedsAuthC).toBool(); - auto accountProxyUser = settings.value(networkProxyUserC).toString(); - const auto globalProxyType = settings.value(ClientProxy::proxyTypeC).value(); - qCDebug(lcAccountManager) << "Account proxy type:" << accountProxyType; - qCDebug(lcAccountManager) << "Global proxy type:" << globalProxyType; - if (accountProxyType == QNetworkProxy::NoProxy && globalProxyType != QNetworkProxy::NoProxy) { - accountProxyType = globalProxyType; - accountProxyHost = settings.value(ClientProxy::proxyHostC).toString(); - accountProxyPort = settings.value(ClientProxy::proxyPortC).toInt(); - accountProxyNeedsAuth = settings.value(ClientProxy::proxyNeedsAuthC).toBool(); - accountProxyUser = settings.value(ClientProxy::proxyUserC).toString(); - qCInfo(lcAccountManager) << "Account has no proxy set, using global proxy instead."; - } - - acc->setProxyType(accountProxyType); - acc->setProxyHostName(accountProxyHost); - acc->setProxyPort(accountProxyPort); - acc->setProxyNeedsAuth(accountProxyNeedsAuth); - acc->setProxyUser(accountProxyUser); - } - acc->setUploadLimitSetting( settings.value( networkUploadLimitSettingC, @@ -644,8 +654,11 @@ AccountPtr AccountManager::loadAccountHelper(QSettings &settings) acc->setUploadLimit(settings.value(networkUploadLimitC).toInt()); acc->setDownloadLimit(settings.value(networkDownloadLimitC).toInt()); + ConfigFile configFile; const auto proxyPasswordKey = QString(acc->userIdAtHostWithPort() + networkProxyPasswordKeychainKeySuffixC); - const auto job = new QKeychain::ReadPasswordJob(Theme::instance()->appName(), this); + const auto appName = configFile.isUnbrandedToBrandedMigrationInProgress() ? ConfigFile::unbrandedAppName + : Theme::instance()->appName(); + const auto job = new QKeychain::ReadPasswordJob(appName, this); job->setKey(proxyPasswordKey); connect(job, &QKeychain::Job::finished, this, [acc](const QKeychain::Job *const incomingJob) { const auto incomingReadJob = qobject_cast(incomingJob); diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h index ea597594d08ad..7a1efcdd515a7 100644 --- a/src/gui/accountmanager.h +++ b/src/gui/accountmanager.h @@ -113,7 +113,7 @@ public slots: // 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); + void migrateNetworkSettings(const AccountPtr &account, const QSettings &settings); bool restoreFromLegacySettings(); diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index b0ba29ee007b7..105946a9c61c8 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -39,12 +39,10 @@ namespace { static constexpr char showMainDialogAsNormalWindowC[] = "showMainDialogAsNormalWindow"; static constexpr char showConfigBackupWarningC[] = "showConfigBackupWarning"; - static constexpr char remotePollIntervalC[] = "remotePollInterval"; static constexpr char forceSyncIntervalC[] = "forceSyncInterval"; static constexpr char fullLocalDiscoveryIntervalC[] = "fullLocalDiscoveryInterval"; static constexpr char notificationRefreshIntervalC[] = "notificationRefreshInterval"; -static constexpr char monoIconsC[] = "monoIcons"; static constexpr char deleteFilesThresholdC[] = "deleteFilesThreshold"; static constexpr char skipUpdateCheckC[] = "skipUpdateCheck"; static constexpr char updateCheckIntervalC[] = "updateCheckInterval"; diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h index 1b37d645882fd..5fbdf32f69318 100644 --- a/src/libsync/configfile.h +++ b/src/libsync/configfile.h @@ -274,6 +274,7 @@ class OWNCLOUDSYNC_EXPORT ConfigFile static constexpr char isVfsEnabledC[] = "isVfsEnabled"; static constexpr char launchOnSystemStartupC[] = "launchOnSystemStartup"; + static constexpr char monoIconsC[] = "monoIcons"; static constexpr char optionalServerNotificationsC[] = "optionalServerNotifications"; static constexpr char promptDeleteC[] = "promptDeleteAllFiles"; static constexpr char showCallNotificationsC[] = "showCallNotifications";