diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 08530a00d7..b824df53ab 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -1426,7 +1426,14 @@ void Account::setUploadLimitSetting(const AccountNetworkTransferLimitSetting set return; } - _uploadLimitSetting = setting; + auto targetSetting = setting; + + if (setting == AccountNetworkTransferLimitSetting::LegacyGlobalLimit) { + qCInfo(lcAccount) << "Upload limit setting was requested to be set to the legacy global limit, falling back to unlimited"; + targetSetting = AccountNetworkTransferLimitSetting::NoLimit; + } + + _uploadLimitSetting = targetSetting; emit uploadLimitSettingChanged(); } @@ -1440,8 +1447,15 @@ void Account::setDownloadLimitSetting(const AccountNetworkTransferLimitSetting s if (setting == _downloadLimitSetting) { return; } - - _downloadLimitSetting = setting; + + auto targetSetting = setting; + + if (setting == AccountNetworkTransferLimitSetting::LegacyGlobalLimit) { + qCInfo(lcAccount) << "Download limit setting was requested to be set to the legacy global limit, falling back to unlimited"; + targetSetting = AccountNetworkTransferLimitSetting::NoLimit; + } + + _downloadLimitSetting = targetSetting; emit downloadLimitSettingChanged(); } diff --git a/src/libsync/account.h b/src/libsync/account.h index e61c675f8d..36d17a7b60 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -99,6 +99,7 @@ class OWNCLOUDSYNC_EXPORT Account : public QObject public: enum class AccountNetworkTransferLimitSetting { + LegacyGlobalLimit = -2, // Until 3.17.0 a value of -2 was interpreted as "Use global network settings", it's now used to fall back to "No limit". See also GH#8743 AutoLimit = -1, // Value under 0 is interpreted as auto in general NoLimit, ManualLimit, diff --git a/test/testaccount.cpp b/test/testaccount.cpp index 670b6553de..698e2296d1 100644 --- a/test/testaccount.cpp +++ b/test/testaccount.cpp @@ -69,6 +69,37 @@ private slots: QCOMPARE(account->isPublicShareLink(), expectedResult); QCOMPARE(account->davUser(), expectedDavUser); } + + void testAccount_setLimitSettings_globalNetworkLimitFallback() + { + using LimitSetting = Account::AccountNetworkTransferLimitSetting; + AccountPtr account = Account::create(); + + const auto setLimitSettings = [account](const LimitSetting setting) -> void { + account->setDownloadLimitSetting(setting); + account->setUploadLimitSetting(setting); + }; + + const auto verifyLimitSettings = [account](const LimitSetting expectedSetting) -> void { + QCOMPARE_EQ(expectedSetting, account->downloadLimitSetting()); + QCOMPARE_EQ(expectedSetting, account->uploadLimitSetting()); + }; + + // the default setting should be NoLimit + verifyLimitSettings(LimitSetting::NoLimit); + + // changing it to ManualLimit should succeed + setLimitSettings(LimitSetting::ManualLimit); + verifyLimitSettings(LimitSetting::ManualLimit); + + // changing it to AutoLimit should succeed + setLimitSettings(LimitSetting::AutoLimit); + verifyLimitSettings(LimitSetting::AutoLimit); + + // changing it to LegacyGlobalLimit (-2) should fall back to NoLimit + setLimitSettings(LimitSetting::LegacyGlobalLimit); + verifyLimitSettings(LimitSetting::NoLimit); + } }; QTEST_APPLESS_MAIN(TestAccount)