Skip to content

Commit fdeef73

Browse files
rorybotclaude
authored andcommitted
WebUI: remember seeds/size filters
Mirror the desktop GUI "Remember filters" feature in the Web interface. Previously the seeds and size search filters reset to their defaults for every new search tab (resetFilters()), while only the "Search in" mode persisted via ClientData. Add a "Remember filters" checkbox to the search filter row. When ticked, the seeds/size filter values (including size units) are stored via ClientData and used to seed new search tabs; when unticked, behaviour is unchanged. The stored values and checkbox state persist across sessions, following the same ClientData pattern already used for "search_in_filter". Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015FE31f3czMACwmRDUFchDM
1 parent 481ea60 commit fdeef73

3 files changed

Lines changed: 51 additions & 6 deletions

File tree

src/webui/www/private/scripts/client.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ window.qBittorrent.Client ??= (() => {
7575
"hide_zero_status_filters",
7676
"qbt_selected_log_levels",
7777
"search_in_filter",
78+
"search_max_seeds",
79+
"search_max_size",
80+
"search_max_size_unit",
81+
"search_min_seeds",
82+
"search_min_size",
83+
"search_min_size_unit",
84+
"search_remember_filters",
7885
"show_filters_sidebar",
7986
"show_log_viewer",
8087
"show_rss_reader",

src/webui/www/private/scripts/search.js

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ window.qBittorrent.Search ??= (() => {
4242
searchSeedsFilterChanged: searchSeedsFilterChanged,
4343
searchSizeFilterChanged: searchSizeFilterChanged,
4444
searchSizeFilterPrefixChanged: searchSizeFilterPrefixChanged,
45+
searchRememberFiltersChanged: searchRememberFiltersChanged,
4546
closeSearchTab: closeSearchTab,
4647
};
4748
};
@@ -128,6 +129,7 @@ window.qBittorrent.Search ??= (() => {
128129

129130
const init = () => {
130131
document.getElementById("searchInTorrentName").value = (window.qBittorrent.ClientData.get("search_in_filter") === "names") ? "names" : "everywhere";
132+
document.getElementById("searchRememberFilters").checked = (window.qBittorrent.ClientData.get("search_remember_filters") === true);
131133
const searchResultsTableContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({
132134
targets: "#searchResultsTableDiv tbody tr",
133135
menu: "searchResultsTableMenu",
@@ -875,21 +877,51 @@ window.qBittorrent.Search ??= (() => {
875877
searchText.filterPattern = "";
876878
document.getElementById("searchInNameFilter").value = "";
877879

878-
searchSeedsFilter.min = 0;
879-
searchSeedsFilter.max = 0;
880+
// When the user opted to remember filters, new search tabs start from the
881+
// previously stored values instead of the hardcoded defaults.
882+
const remember = isRememberFiltersEnabled();
883+
const clientData = window.qBittorrent.ClientData;
884+
885+
searchSeedsFilter.min = remember ? Number(clientData.get("search_min_seeds") ?? 0) : 0;
886+
searchSeedsFilter.max = remember ? Number(clientData.get("search_max_seeds") ?? 0) : 0;
880887
document.getElementById("searchMinSeedsFilter").value = searchSeedsFilter.min;
881888
document.getElementById("searchMaxSeedsFilter").value = searchSeedsFilter.max;
882889

883-
searchSizeFilter.min = 0;
884-
searchSizeFilter.minUnit = 2; // B = 0, KiB = 1, MiB = 2, GiB = 3, TiB = 4, PiB = 5, EiB = 6
885-
searchSizeFilter.max = 0;
886-
searchSizeFilter.maxUnit = 3;
890+
// B = 0, KiB = 1, MiB = 2, GiB = 3, TiB = 4, PiB = 5, EiB = 6
891+
searchSizeFilter.min = remember ? Number(clientData.get("search_min_size") ?? 0) : 0;
892+
searchSizeFilter.minUnit = remember ? Number(clientData.get("search_min_size_unit") ?? 2) : 2;
893+
searchSizeFilter.max = remember ? Number(clientData.get("search_max_size") ?? 0) : 0;
894+
searchSizeFilter.maxUnit = remember ? Number(clientData.get("search_max_size_unit") ?? 3) : 3;
887895
document.getElementById("searchMinSizeFilter").value = searchSizeFilter.min;
888896
document.getElementById("searchMinSizePrefix").value = searchSizeFilter.minUnit;
889897
document.getElementById("searchMaxSizeFilter").value = searchSizeFilter.max;
890898
document.getElementById("searchMaxSizePrefix").value = searchSizeFilter.maxUnit;
891899
};
892900

901+
const isRememberFiltersEnabled = () => document.getElementById("searchRememberFilters").checked;
902+
903+
const getCurrentFilterData = () => ({
904+
search_min_seeds: Number(document.getElementById("searchMinSeedsFilter").value),
905+
search_max_seeds: Number(document.getElementById("searchMaxSeedsFilter").value),
906+
search_min_size: Number(document.getElementById("searchMinSizeFilter").value),
907+
search_min_size_unit: Number(document.getElementById("searchMinSizePrefix").value),
908+
search_max_size: Number(document.getElementById("searchMaxSizeFilter").value),
909+
search_max_size_unit: Number(document.getElementById("searchMaxSizePrefix").value),
910+
});
911+
912+
const saveFiltersIfRemembered = () => {
913+
if (isRememberFiltersEnabled())
914+
window.qBittorrent.ClientData.set(getCurrentFilterData()).catch(console.error);
915+
};
916+
917+
const searchRememberFiltersChanged = () => {
918+
const enabled = isRememberFiltersEnabled();
919+
const data = { search_remember_filters: enabled };
920+
if (enabled)
921+
Object.assign(data, getCurrentFilterData());
922+
window.qBittorrent.ClientData.set(data).catch(console.error);
923+
};
924+
893925
const getSearchInTorrentName = () => {
894926
return (document.getElementById("searchInTorrentName").value === "names") ? "names" : "everywhere";
895927
};
@@ -904,6 +936,7 @@ window.qBittorrent.Search ??= (() => {
904936
searchSeedsFilter.min = document.getElementById("searchMinSeedsFilter").value;
905937
searchSeedsFilter.max = document.getElementById("searchMaxSeedsFilter").value;
906938

939+
saveFiltersIfRemembered();
907940
searchFilterChanged();
908941
};
909942

@@ -913,6 +946,7 @@ window.qBittorrent.Search ??= (() => {
913946
searchSizeFilter.max = document.getElementById("searchMaxSizeFilter").value;
914947
searchSizeFilter.maxUnit = document.getElementById("searchMaxSizePrefix").value;
915948

949+
saveFiltersIfRemembered();
916950
searchFilterChanged();
917951
};
918952

src/webui/www/private/views/search.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,10 @@
196196
<option value="5">QBT_TR(PiB)QBT_TR[CONTEXT=misc]</option>
197197
<option value="6">QBT_TR(EiB)QBT_TR[CONTEXT=misc]</option>
198198
</select>
199+
200+
<label for="searchRememberFilters" style="margin-left: 15px;" title="QBT_TR(Save these filter values and reuse them for new searches)QBT_TR[CONTEXT=SearchEngineWidget]">
201+
<input type="checkbox" id="searchRememberFilters" onchange="qBittorrent.Search.searchRememberFiltersChanged()">QBT_TR(Remember filters)QBT_TR[CONTEXT=SearchEngineWidget]
202+
</label>
199203
</div>
200204
</div>
201205
</div>

0 commit comments

Comments
 (0)