From 9b64d5066052fa0e65184f67cf95a0c42a3d833c Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sun, 4 Feb 2024 13:32:33 +0800 Subject: [PATCH] Conditionally hide settings in Advanced Options --- src/webui/api/appcontroller.cpp | 14 +++- src/webui/webapplication.h | 2 +- src/webui/www/private/scripts/client.js | 50 ++++++++----- src/webui/www/private/scripts/misc.js | 24 +++++++ src/webui/www/private/views/about.html | 28 ++------ src/webui/www/private/views/preferences.html | 75 +++++++++++++------- 6 files changed, 129 insertions(+), 64 deletions(-) diff --git a/src/webui/api/appcontroller.cpp b/src/webui/api/appcontroller.cpp index a785fc3f5..ea367cb19 100644 --- a/src/webui/api/appcontroller.cpp +++ b/src/webui/api/appcontroller.cpp @@ -78,6 +78,17 @@ void AppController::versionAction() void AppController::buildInfoAction() { + const QString platformName = +#ifdef Q_OS_LINUX + u"linux"_s; +#elif defined(Q_OS_MACOS) + u"macos"_s; +#elif defined(Q_OS_WIN) + u"windows"_s; +#else + u"unknown"_s; +#endif + const QJsonObject versions = { {u"qt"_s, QStringLiteral(QT_VERSION_STR)}, @@ -85,7 +96,8 @@ void AppController::buildInfoAction() {u"boost"_s, Utils::Misc::boostVersionString()}, {u"openssl"_s, Utils::Misc::opensslVersionString()}, {u"zlib"_s, Utils::Misc::zlibVersionString()}, - {u"bitness"_s, (QT_POINTER_SIZE * 8)} + {u"bitness"_s, (QT_POINTER_SIZE * 8)}, + {u"platform"_s, platformName} }; setResult(versions); } diff --git a/src/webui/webapplication.h b/src/webui/webapplication.h index bdbe78e8d..57651e9e7 100644 --- a/src/webui/webapplication.h +++ b/src/webui/webapplication.h @@ -53,7 +53,7 @@ #include "base/utils/version.h" #include "api/isessionmanager.h" -inline const Utils::Version<3, 2> API_VERSION {2, 10, 2}; +inline const Utils::Version<3, 2> API_VERSION {2, 10, 3}; class QTimer; diff --git a/src/webui/www/private/scripts/client.js b/src/webui/www/private/scripts/client.js index 212414768..ca86563b6 100644 --- a/src/webui/www/private/scripts/client.js +++ b/src/webui/www/private/scripts/client.js @@ -125,24 +125,8 @@ function getSyncMainDataInterval() { return customSyncMainDataInterval ? customSyncMainDataInterval : serverSyncMainDataInterval; } -const fetchQbtVersion = function() { - new Request({ - url: 'api/v2/app/version', - method: 'get', - onSuccess: function(info) { - if (!info) - return; - sessionStorage.setItem('qbtVersion', info); - } - }).send(); -}; -fetchQbtVersion(); - const qbtVersion = function() { - const version = sessionStorage.getItem('qbtVersion'); - if (!version) - return ''; - return version; + return LocalPreferences.get('qbtVersion', ''); }; window.addEvent('load', function() { @@ -1474,6 +1458,38 @@ window.addEvent('load', function() { }); }; registerDragAndDrop(); + + // fetch qbt version and store it locally + new Request({ + url: 'api/v2/app/version', + method: 'get', + noCache: true, + onSuccess: (info) => { + if (!info) + return; + + LocalPreferences.set('qbtVersion', info); + } + }).send(); + + // fetch build info and store it locally + new Request.JSON({ + url: 'api/v2/app/buildInfo', + method: 'get', + noCache: true, + onSuccess: (info) => { + if (!info) + return; + + LocalPreferences.set('buildInfo.qtVersion', info.qt); + LocalPreferences.set('buildInfo.libtorrentVersion', info.libtorrent); + LocalPreferences.set('buildInfo.boostVersion', info.boost); + LocalPreferences.set('buildInfo.opensslVersion', info.openssl); + LocalPreferences.set('buildInfo.zlibVersion', info.zlib); + LocalPreferences.set('buildInfo.bitness', info.bitness); + LocalPreferences.set('buildInfo.platform', info.platform); + } + }).send(); }); function registerMagnetHandler() { diff --git a/src/webui/www/private/scripts/misc.js b/src/webui/www/private/scripts/misc.js index cf23ab35d..0326b0be5 100644 --- a/src/webui/www/private/scripts/misc.js +++ b/src/webui/www/private/scripts/misc.js @@ -40,6 +40,7 @@ window.qBittorrent.Misc = (function() { friendlyPercentage: friendlyPercentage, friendlyFloat: friendlyFloat, parseHtmlLinks: parseHtmlLinks, + parseVersion: parseVersion, escapeHtml: escapeHtml, naturalSortCollator: naturalSortCollator, safeTrim: safeTrim, @@ -171,6 +172,29 @@ window.qBittorrent.Misc = (function() { return text.replace(exp, "$1"); }; + const parseVersion = function(versionString) { + const failure = { + valid: false + }; + + if (typeof versionString !== 'string') + return failure; + + const tryToNumber = (str) => { + const num = Number(str); + return (isNaN(num) ? str : num); + }; + + const ver = versionString.split('.', 4).map(val => tryToNumber(val)); + return { + valid: true, + major: ver[0], + minor: ver[1], + fix: ver[2], + patch: ver[3] + }; + }; + const escapeHtml = function(str) { const div = document.createElement('div'); div.appendChild(document.createTextNode(str)); diff --git a/src/webui/www/private/views/about.html b/src/webui/www/private/views/about.html index cf864daae..c204b4354 100644 --- a/src/webui/www/private/views/about.html +++ b/src/webui/www/private/views/about.html @@ -843,25 +843,11 @@ diff --git a/src/webui/www/private/views/preferences.html b/src/webui/www/private/views/preferences.html index 358dec676..60582b5f5 100644 --- a/src/webui/www/private/views/preferences.html +++ b/src/webui/www/private/views/preferences.html @@ -355,10 +355,10 @@ -
+
- + @@ -993,9 +993,9 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD - + - + @@ -1136,9 +1136,9 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD - + - + - + - + - + - + - + - + - +
- +   QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog] @@ -1091,7 +1091,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
- + @@ -1160,17 +1160,17 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD   QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
- +   QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
- +   QBT_TR(s)QBT_TR[CONTEXT=OptionsDialog] @@ -1184,9 +1184,9 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD   QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
- + - +
- + @@ -1485,33 +1485,33 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
- +
- +
- +
- + @@ -1574,6 +1574,33 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD }; }; + // hide entries + const libtorrentVersion = window.qBittorrent.Misc.parseVersion(LocalPreferences.get('buildInfo.libtorrentVersion', '')); + if (libtorrentVersion.valid) { + if (libtorrentVersion.major >= 2) { + $('rowDiskCache').style.display = 'none'; + $('rowDiskCacheExpiryInterval').style.display = 'none'; + $('rowCoalesceReadsAndWrites').style.display = 'none'; + } + else { + $('fieldsetI2p').style.display = 'none'; + $('rowMemoryWorkingSetLimit').style.display = 'none'; + $('rowHashingThreads').style.display = 'none'; + $('rowDiskIOType').style.display = 'none'; + $('rowI2pInboundQuantity').style.display = 'none'; + $('rowI2pOutboundQuantity').style.display = 'none'; + $('rowI2pInboundLength').style.display = 'none'; + $('rowI2pOutboundLength').style.display = 'none'; + } + + if (!((libtorrentVersion.major >= 2) && (libtorrentVersion.minor >= 0) && (libtorrentVersion.fix >= 6))) + $('diskIOWriteModeWriteThrough').style.display = 'none'; + } + + const serverPlatform = LocalPreferences.get('buildInfo.platform', ''); + if ((serverPlatform !== 'macos') && (serverPlatform !== 'windows')) + $('rowMarkOfTheWeb').style.display = 'none'; + // Behavior tab const numberInputLimiter = (input) => { const min = input.getAttribute("min");