From b851caa6b9a2218612be9b45cc41e7375cf71ba4 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Wed, 27 Aug 2025 17:34:50 +0800 Subject: [PATCH] WebUI: use local preference class locally --- src/webui/www/private/rename_files.html | 46 +++++----- src/webui/www/private/scripts/addtorrent.js | 8 +- src/webui/www/private/scripts/client.js | 91 ++++++++++--------- src/webui/www/private/scripts/color-scheme.js | 4 +- src/webui/www/private/scripts/dynamicTable.js | 41 ++++----- src/webui/www/private/scripts/mocha-init.js | 12 +-- src/webui/www/private/scripts/search.js | 20 ++-- .../www/private/views/createtorrent.html | 6 +- src/webui/www/private/views/filters.html | 14 +-- src/webui/www/private/views/log.html | 6 +- src/webui/www/private/views/preferences.html | 38 ++++---- 11 files changed, 149 insertions(+), 137 deletions(-) diff --git a/src/webui/www/private/rename_files.html b/src/webui/www/private/rename_files.html index f178e6999..6363755cf 100644 --- a/src/webui/www/private/rename_files.html +++ b/src/webui/www/private/rename_files.html @@ -76,48 +76,50 @@ const fileRenamer = new window.qBittorrent.MultiRename.RenameFiles(); fileRenamer.hash = data.hash; + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + // Load Multi Rename Preferences - const multiRenamePrefChecked = LocalPreferences.get("multirename_rememberPreferences", "true") === "true"; + const multiRenamePrefChecked = localPreferences.get("multirename_rememberPreferences", "true") === "true"; document.getElementById("multirename_rememberprefs_checkbox").checked = multiRenamePrefChecked; if (multiRenamePrefChecked) { - const multirename_search = LocalPreferences.get("multirename_search", ""); + const multirename_search = localPreferences.get("multirename_search", ""); fileRenamer.setSearch(multirename_search); document.getElementById("multiRenameSearch").value = multirename_search; - const multirename_useRegex = LocalPreferences.get("multirename_useRegex", false); + const multirename_useRegex = localPreferences.get("multirename_useRegex", false); fileRenamer.useRegex = multirename_useRegex === "true"; document.getElementById("use_regex_search").checked = fileRenamer.useRegex; - const multirename_matchAllOccurrences = LocalPreferences.get("multirename_matchAllOccurrences", false); + const multirename_matchAllOccurrences = localPreferences.get("multirename_matchAllOccurrences", false); fileRenamer.matchAllOccurrences = multirename_matchAllOccurrences === "true"; document.getElementById("match_all_occurrences").checked = fileRenamer.matchAllOccurrences; - const multirename_caseSensitive = LocalPreferences.get("multirename_caseSensitive", false); + const multirename_caseSensitive = localPreferences.get("multirename_caseSensitive", false); fileRenamer.caseSensitive = multirename_caseSensitive === "true"; document.getElementById("case_sensitive").checked = fileRenamer.caseSensitive; - const multirename_replace = LocalPreferences.get("multirename_replace", ""); + const multirename_replace = localPreferences.get("multirename_replace", ""); fileRenamer.setReplacement(multirename_replace); document.getElementById("multiRenameReplace").value = multirename_replace; - const multirename_appliesTo = LocalPreferences.get("multirename_appliesTo", window.qBittorrent.MultiRename.AppliesTo.FilenameExtension); + const multirename_appliesTo = localPreferences.get("multirename_appliesTo", window.qBittorrent.MultiRename.AppliesTo.FilenameExtension); fileRenamer.appliesTo = window.qBittorrent.MultiRename.AppliesTo[multirename_appliesTo]; document.getElementById("applies_to_option").value = fileRenamer.appliesTo; - const multirename_includeFiles = LocalPreferences.get("multirename_includeFiles", true); + const multirename_includeFiles = localPreferences.get("multirename_includeFiles", true); fileRenamer.includeFiles = multirename_includeFiles === "true"; document.getElementById("include_files").checked = fileRenamer.includeFiles; - const multirename_includeFolders = LocalPreferences.get("multirename_includeFolders", false); + const multirename_includeFolders = localPreferences.get("multirename_includeFolders", false); fileRenamer.includeFolders = multirename_includeFolders === "true"; document.getElementById("include_folders").checked = fileRenamer.includeFolders; - const multirename_fileEnumerationStart = LocalPreferences.get("multirename_fileEnumerationStart", 0); + const multirename_fileEnumerationStart = localPreferences.get("multirename_fileEnumerationStart", 0); fileRenamer.fileEnumerationStart = Number(multirename_fileEnumerationStart); document.getElementById("file_counter").value = fileRenamer.fileEnumerationStart; - const multirename_replaceAll = LocalPreferences.get("multirename_replaceAll", false); + const multirename_replaceAll = localPreferences.get("multirename_replaceAll", false); fileRenamer.replaceAll = multirename_replaceAll === "true"; const renameButtonValue = fileRenamer.replaceAll ? "Replace All" : "Replace"; document.getElementById("renameOptions").value = renameButtonValue; @@ -137,22 +139,22 @@ // Search input has changed document.getElementById("multiRenameSearch").style["border-color"] = ""; - LocalPreferences.set("multirename_search", sanitized); + localPreferences.set("multirename_search", sanitized); fileRenamer.setSearch(sanitized); }); document.getElementById("use_regex_search").addEventListener("change", (e) => { fileRenamer.useRegex = e.target.checked; - LocalPreferences.set("multirename_useRegex", e.target.checked); + localPreferences.set("multirename_useRegex", e.target.checked); fileRenamer.update(); }); document.getElementById("match_all_occurrences").addEventListener("change", (e) => { fileRenamer.matchAllOccurrences = e.target.checked; - LocalPreferences.set("multirename_matchAllOccurrences", e.target.checked); + localPreferences.set("multirename_matchAllOccurrences", e.target.checked); fileRenamer.update(); }); document.getElementById("case_sensitive").addEventListener("change", (e) => { fileRenamer.caseSensitive = e.target.checked; - LocalPreferences.set("multirename_caseSensitive", e.target.checked); + localPreferences.set("multirename_caseSensitive", e.target.checked); fileRenamer.update(); }); @@ -184,22 +186,22 @@ // Replace input has changed document.getElementById("multiRenameReplace").style["border-color"] = ""; - LocalPreferences.set("multirename_replace", sanitized); + localPreferences.set("multirename_replace", sanitized); fileRenamer.setReplacement(sanitized); }); document.getElementById("applies_to_option").addEventListener("change", (e) => { fileRenamer.appliesTo = e.target.value; - LocalPreferences.set("multirename_appliesTo", e.target.value); + localPreferences.set("multirename_appliesTo", e.target.value); fileRenamer.update(); }); document.getElementById("include_files").addEventListener("change", (e) => { fileRenamer.includeFiles = e.target.checked; - LocalPreferences.set("multirename_includeFiles", e.target.checked); + localPreferences.set("multirename_includeFiles", e.target.checked); fileRenamer.update(); }); document.getElementById("include_folders").addEventListener("change", (e) => { fileRenamer.includeFolders = e.target.checked; - LocalPreferences.set("multirename_includeFolders", e.target.checked); + localPreferences.set("multirename_includeFolders", e.target.checked); fileRenamer.update(); }); document.getElementById("file_counter").addEventListener("input", (e) => { @@ -212,7 +214,7 @@ value = 99999999; fileRenamer.fileEnumerationStart = value; document.getElementById("file_counter").value = value; - LocalPreferences.set("multirename_fileEnumerationStart", value); + localPreferences.set("multirename_fileEnumerationStart", value); fileRenamer.update(); }); @@ -278,7 +280,7 @@ fileRenamer.replaceAll = true; else fileRenamer.replaceAll = false; - LocalPreferences.set("multirename_replaceAll", fileRenamer.replaceAll); + localPreferences.set("multirename_replaceAll", fileRenamer.replaceAll); document.getElementById("renameButton").value = replaceOperation; }); document.getElementById("closeButton").addEventListener("click", (event) => { @@ -400,7 +402,7 @@
- +

diff --git a/src/webui/www/private/scripts/addtorrent.js b/src/webui/www/private/scripts/addtorrent.js index 3decbf73a..b36631041 100644 --- a/src/webui/www/private/scripts/addtorrent.js +++ b/src/webui/www/private/scripts/addtorrent.js @@ -43,10 +43,10 @@ window.qBittorrent.AddTorrent ??= (() => { let windowId = ""; let source = ""; - const LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); const getCategories = () => { - const defaultCategory = LocalPreferences.get("add_torrent_default_category", ""); + const defaultCategory = localPreferences.get("add_torrent_default_category", ""); const categorySelect = document.getElementById("categorySelect"); for (const name of window.parent.qBittorrent.Client.categoryMap.keys()) { const option = document.createElement("option"); @@ -312,9 +312,9 @@ window.qBittorrent.AddTorrent ??= (() => { if (document.getElementById("setDefaultCategory").checked) { const category = document.getElementById("category").value.trim(); if (category.length === 0) - LocalPreferences.remove("add_torrent_default_category"); + localPreferences.remove("add_torrent_default_category"); else - LocalPreferences.set("add_torrent_default_category", category); + localPreferences.set("add_torrent_default_category", category); } }; diff --git a/src/webui/www/private/scripts/client.js b/src/webui/www/private/scripts/client.js index 6866ba6c4..002083d3c 100644 --- a/src/webui/www/private/scripts/client.js +++ b/src/webui/www/private/scripts/client.js @@ -212,6 +212,7 @@ Object.freeze(window.qBittorrent.Client); window.qBittorrent.Client.setup(); // TODO: move global functions/variables into some namespace/scope +const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); this.torrentsTable = new window.qBittorrent.DynamicTable.TorrentsTable(); @@ -223,21 +224,21 @@ let queueing_enabled = true; let serverSyncMainDataInterval = 1500; let customSyncMainDataInterval = null; let useSubcategories = true; -const useAutoHideZeroStatusFilters = LocalPreferences.get("hide_zero_status_filters", "false") === "true"; -const displayFullURLTrackerColumn = LocalPreferences.get("full_url_tracker_column", "false") === "true"; +const useAutoHideZeroStatusFilters = localPreferences.get("hide_zero_status_filters", "false") === "true"; +const displayFullURLTrackerColumn = localPreferences.get("full_url_tracker_column", "false") === "true"; /* Categories filter */ const CATEGORIES_ALL = "b4af0e4c-e76d-4bac-a392-46cbc18d9655"; const CATEGORIES_UNCATEGORIZED = "e24bd469-ea22-404c-8e2e-a17c82f37ea0"; -let selectedCategory = LocalPreferences.get("selected_category", CATEGORIES_ALL); +let selectedCategory = localPreferences.get("selected_category", CATEGORIES_ALL); let setCategoryFilter = () => {}; /* Tags filter */ const TAGS_ALL = "b4af0e4c-e76d-4bac-a392-46cbc18d9655"; const TAGS_UNTAGGED = "e24bd469-ea22-404c-8e2e-a17c82f37ea0"; -let selectedTag = LocalPreferences.get("selected_tag", TAGS_ALL); +let selectedTag = localPreferences.get("selected_tag", TAGS_ALL); let setTagFilter = () => {}; /* Trackers filter */ @@ -250,11 +251,11 @@ const TRACKERS_WARNING = "82a702c5-210c-412b-829f-97632d7557e9"; // Map> const trackerMap = new Map(); -let selectedTracker = LocalPreferences.get("selected_tracker", TRACKERS_ALL); +let selectedTracker = localPreferences.get("selected_tracker", TRACKERS_ALL); let setTrackerFilter = () => {}; /* All filters */ -let selectedStatus = LocalPreferences.get("selected_filter", "all"); +let selectedStatus = localPreferences.get("selected_filter", "all"); let setStatusFilter = () => {}; let toggleFilterDisplay = () => {}; @@ -267,9 +268,9 @@ window.addEventListener("DOMContentLoaded", (event) => { const saveColumnSizes = () => { const filters_width = document.getElementById("Filters").getSize().x; - LocalPreferences.set("filters_width", filters_width); + localPreferences.set("filters_width", filters_width); const properties_height_rel = document.getElementById("propertiesPanel").getSize().y / Window.getSize().y; - LocalPreferences.set("properties_height_rel", properties_height_rel); + localPreferences.set("properties_height_rel", properties_height_rel); }; window.addEventListener("resize", window.qBittorrent.Misc.createDebounceHandler(500, (e) => { @@ -290,7 +291,7 @@ window.addEventListener("DOMContentLoaded", (event) => { onResize: window.qBittorrent.Misc.createDebounceHandler(500, (e) => { saveColumnSizes(); }), - width: Number(LocalPreferences.get("filters_width", 210)), + width: Number(localPreferences.get("filters_width", 210)), resizeLimit: [1, 1000] }); new MochaUI.Column({ @@ -352,7 +353,7 @@ window.addEventListener("DOMContentLoaded", (event) => { setStatusFilter = (name) => { const currentHash = torrentsTable.getCurrentTorrentID(); - LocalPreferences.set("selected_filter", name); + localPreferences.set("selected_filter", name); selectedStatus = name; highlightSelectedStatus(); updateMainData(); @@ -364,7 +365,7 @@ window.addEventListener("DOMContentLoaded", (event) => { setCategoryFilter = (category) => { const currentHash = torrentsTable.getCurrentTorrentID(); - LocalPreferences.set("selected_category", category); + localPreferences.set("selected_category", category); selectedCategory = category; highlightSelectedCategory(); updateMainData(); @@ -376,7 +377,7 @@ window.addEventListener("DOMContentLoaded", (event) => { setTagFilter = (tag) => { const currentHash = torrentsTable.getCurrentTorrentID(); - LocalPreferences.set("selected_tag", tag); + localPreferences.set("selected_tag", tag); selectedTag = tag; highlightSelectedTag(); updateMainData(); @@ -388,7 +389,7 @@ window.addEventListener("DOMContentLoaded", (event) => { setTrackerFilter = (tracker) => { const currentHash = torrentsTable.getCurrentTorrentID(); - LocalPreferences.set("selected_tracker", tracker); + localPreferences.set("selected_tracker", tracker); selectedTracker = tracker; highlightSelectedTracker(); updateMainData(); @@ -402,7 +403,7 @@ window.addEventListener("DOMContentLoaded", (event) => { const filterTitle = filterList.previousElementSibling; const toggleIcon = filterTitle.firstElementChild; toggleIcon.classList.toggle("rotate"); - LocalPreferences.set(`filter_${filterListID.replace("FilterList", "")}_collapsed`, filterList.classList.toggle("invisible").toString()); + localPreferences.set(`filter_${filterListID.replace("FilterList", "")}_collapsed`, filterList.classList.toggle("invisible").toString()); }; new MochaUI.Panel({ @@ -426,35 +427,35 @@ window.addEventListener("DOMContentLoaded", (event) => { initializeWindows(); // Show Top Toolbar is enabled by default - let showTopToolbar = LocalPreferences.get("show_top_toolbar", "true") === "true"; + let showTopToolbar = localPreferences.get("show_top_toolbar", "true") === "true"; if (!showTopToolbar) { document.getElementById("showTopToolbarLink").firstElementChild.style.opacity = "0"; document.getElementById("mochaToolbar").classList.add("invisible"); } // Show Status Bar is enabled by default - let showStatusBar = LocalPreferences.get("show_status_bar", "true") === "true"; + let showStatusBar = localPreferences.get("show_status_bar", "true") === "true"; if (!showStatusBar) { document.getElementById("showStatusBarLink").firstElementChild.style.opacity = "0"; document.getElementById("desktopFooterWrapper").classList.add("invisible"); } // Show Filters Sidebar is enabled by default - let showFiltersSidebar = LocalPreferences.get("show_filters_sidebar", "true") === "true"; + let showFiltersSidebar = localPreferences.get("show_filters_sidebar", "true") === "true"; if (!showFiltersSidebar) { document.getElementById("showFiltersSidebarLink").firstElementChild.style.opacity = "0"; document.getElementById("filtersColumn").classList.add("invisible"); document.getElementById("filtersColumn_handle").classList.add("invisible"); } - let speedInTitle = LocalPreferences.get("speed_in_browser_title_bar") === "true"; + let speedInTitle = localPreferences.get("speed_in_browser_title_bar") === "true"; if (!speedInTitle) document.getElementById("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "0"; // After showing/hiding the toolbar + status bar - window.qBittorrent.Client.showSearchEngine(LocalPreferences.get("show_search_engine") !== "false"); - window.qBittorrent.Client.showRssReader(LocalPreferences.get("show_rss_reader") !== "false"); - window.qBittorrent.Client.showLogViewer(LocalPreferences.get("show_log_viewer") === "true"); + window.qBittorrent.Client.showSearchEngine(localPreferences.get("show_search_engine") !== "false"); + window.qBittorrent.Client.showRssReader(localPreferences.get("show_rss_reader") !== "false"); + window.qBittorrent.Client.showLogViewer(localPreferences.get("show_log_viewer") === "true"); // After Show Top Toolbar MochaUI.Desktop.setDesktopSize(); @@ -617,8 +618,8 @@ window.addEventListener("DOMContentLoaded", (event) => { stack.push({ parent: unorderedList, category: subcategory }); } const categoryLocalPref = `category_${category.categoryName}_collapsed`; - const isCollapsed = !category.forceExpand && (LocalPreferences.get(categoryLocalPref, "false") === "true"); - LocalPreferences.set(categoryLocalPref, listItem.classList.toggle("collapsedCategory", isCollapsed).toString()); + const isCollapsed = !category.forceExpand && (localPreferences.get(categoryLocalPref, "false") === "true"); + localPreferences.set(categoryLocalPref, listItem.classList.toggle("collapsedCategory", isCollapsed).toString()); } }; @@ -637,7 +638,7 @@ window.addEventListener("DOMContentLoaded", (event) => { ...(useSubcategories && { children: [], isRoot: true, - forceExpand: LocalPreferences.get(`category_${category}_collapsed`) === null + forceExpand: localPreferences.get(`category_${category}_collapsed`) === null }) }); } @@ -968,7 +969,7 @@ window.addEventListener("DOMContentLoaded", (event) => { trackerMap.delete(host); if (selectedTracker === host) { selectedTracker = TRACKERS_ALL; - LocalPreferences.set("selected_tracker", selectedTracker); + localPreferences.set("selected_tracker", selectedTracker); } } } @@ -1223,7 +1224,7 @@ window.addEventListener("DOMContentLoaded", (event) => { document.getElementById("showTopToolbarLink").addEventListener("click", (e) => { showTopToolbar = !showTopToolbar; - LocalPreferences.set("show_top_toolbar", showTopToolbar.toString()); + localPreferences.set("show_top_toolbar", showTopToolbar.toString()); if (showTopToolbar) { document.getElementById("showTopToolbarLink").firstElementChild.style.opacity = "1"; document.getElementById("mochaToolbar").classList.remove("invisible"); @@ -1237,7 +1238,7 @@ window.addEventListener("DOMContentLoaded", (event) => { document.getElementById("showStatusBarLink").addEventListener("click", (e) => { showStatusBar = !showStatusBar; - LocalPreferences.set("show_status_bar", showStatusBar.toString()); + localPreferences.set("show_status_bar", showStatusBar.toString()); if (showStatusBar) { document.getElementById("showStatusBarLink").firstElementChild.style.opacity = "1"; document.getElementById("desktopFooterWrapper").classList.remove("invisible"); @@ -1274,7 +1275,7 @@ window.addEventListener("DOMContentLoaded", (event) => { document.getElementById("showFiltersSidebarLink").addEventListener("click", (e) => { showFiltersSidebar = !showFiltersSidebar; - LocalPreferences.set("show_filters_sidebar", showFiltersSidebar.toString()); + localPreferences.set("show_filters_sidebar", showFiltersSidebar.toString()); if (showFiltersSidebar) { document.getElementById("showFiltersSidebarLink").firstElementChild.style.opacity = "1"; document.getElementById("filtersColumn").classList.remove("invisible"); @@ -1290,7 +1291,7 @@ window.addEventListener("DOMContentLoaded", (event) => { document.getElementById("speedInBrowserTitleBarLink").addEventListener("click", (e) => { speedInTitle = !speedInTitle; - LocalPreferences.set("speed_in_browser_title_bar", speedInTitle.toString()); + localPreferences.set("speed_in_browser_title_bar", speedInTitle.toString()); if (speedInTitle) document.getElementById("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "1"; else @@ -1300,19 +1301,19 @@ window.addEventListener("DOMContentLoaded", (event) => { document.getElementById("showSearchEngineLink").addEventListener("click", (e) => { window.qBittorrent.Client.showSearchEngine(!window.qBittorrent.Client.isShowSearchEngine()); - LocalPreferences.set("show_search_engine", window.qBittorrent.Client.isShowSearchEngine().toString()); + localPreferences.set("show_search_engine", window.qBittorrent.Client.isShowSearchEngine().toString()); updateTabDisplay(); }); document.getElementById("showRssReaderLink").addEventListener("click", (e) => { window.qBittorrent.Client.showRssReader(!window.qBittorrent.Client.isShowRssReader()); - LocalPreferences.set("show_rss_reader", window.qBittorrent.Client.isShowRssReader().toString()); + localPreferences.set("show_rss_reader", window.qBittorrent.Client.isShowRssReader().toString()); updateTabDisplay(); }); document.getElementById("showLogViewerLink").addEventListener("click", (e) => { window.qBittorrent.Client.showLogViewer(!window.qBittorrent.Client.isShowLogViewer()); - LocalPreferences.set("show_log_viewer", window.qBittorrent.Client.isShowLogViewer().toString()); + localPreferences.set("show_log_viewer", window.qBittorrent.Client.isShowLogViewer().toString()); updateTabDisplay(); }); @@ -1369,7 +1370,7 @@ window.addEventListener("DOMContentLoaded", (event) => { // main window tabs const showTransfersTab = () => { - const showFiltersSidebar = LocalPreferences.get("show_filters_sidebar", "true") === "true"; + const showFiltersSidebar = localPreferences.get("show_filters_sidebar", "true") === "true"; if (showFiltersSidebar) { document.getElementById("filtersColumn").classList.remove("invisible"); document.getElementById("filtersColumn_handle").classList.remove("invisible"); @@ -1384,7 +1385,7 @@ window.addEventListener("DOMContentLoaded", (event) => { hideRssTab(); hideLogTab(); - LocalPreferences.set("selected_window_tab", "transfers"); + localPreferences.set("selected_window_tab", "transfers"); }; const hideTransfersTab = () => { @@ -1420,7 +1421,7 @@ window.addEventListener("DOMContentLoaded", (event) => { hideRssTab(); hideLogTab(); - LocalPreferences.set("selected_window_tab", "search"); + localPreferences.set("selected_window_tab", "search"); }; })(); @@ -1457,7 +1458,7 @@ window.addEventListener("DOMContentLoaded", (event) => { hideSearchTab(); hideLogTab(); - LocalPreferences.set("selected_window_tab", "rss"); + localPreferences.set("selected_window_tab", "rss"); }; })(); @@ -1495,7 +1496,7 @@ window.addEventListener("DOMContentLoaded", (event) => { hideSearchTab(); hideRssTab(); - LocalPreferences.set("selected_window_tab", "log"); + localPreferences.set("selected_window_tab", "log"); }; })(); @@ -1627,7 +1628,7 @@ window.addEventListener("DOMContentLoaded", (event) => { }), height: null }); - let prop_h = LocalPreferences.get("properties_height_rel"); + let prop_h = localPreferences.get("properties_height_rel"); if (prop_h !== null) prop_h = Number(prop_h) * Window.getSize().y; else @@ -1652,7 +1653,7 @@ window.addEventListener("DOMContentLoaded", (event) => { ], onload: () => { updatePropertiesPanel = () => { - switch (LocalPreferences.get("selected_properties_tab")) { + switch (localPreferences.get("selected_properties_tab")) { case "propGeneralLink": window.qBittorrent.PropGeneral.updateData(); break; @@ -1679,7 +1680,7 @@ window.addEventListener("DOMContentLoaded", (event) => { const togglePropertiesPanel = () => { this.collapseToggleEl.click(); - LocalPreferences.set("properties_panel_collapsed", this.isCollapsed.toString()); + localPreferences.set("properties_panel_collapsed", this.isCollapsed.toString()); }; const selectTab = (tabID) => { @@ -1692,17 +1693,17 @@ window.addEventListener("DOMContentLoaded", (event) => { for (const tabContent of this.contentEl.children) tabContent.classList.toggle("invisible", tabContent.id !== tabContentID); - LocalPreferences.set("selected_properties_tab", tabID); + localPreferences.set("selected_properties_tab", tabID); } if (isAlreadySelected || this.isCollapsed) togglePropertiesPanel(); }; - const lastUsedTab = LocalPreferences.get("selected_properties_tab", "propGeneralLink"); + const lastUsedTab = localPreferences.get("selected_properties_tab", "propGeneralLink"); selectTab(lastUsedTab); - const startCollapsed = LocalPreferences.get("properties_panel_collapsed", "false") === "true"; + const startCollapsed = localPreferences.get("properties_panel_collapsed", "false") === "true"; if (startCollapsed) togglePropertiesPanel(); @@ -1893,7 +1894,7 @@ window.addEventListener("DOMContentLoaded", (event) => { if (document.hidden) return; - switch (LocalPreferences.get("selected_window_tab")) { + switch (localPreferences.get("selected_window_tab")) { case "log": window.qBittorrent.Log.load(); break; @@ -1909,7 +1910,7 @@ window.addEventListener("load", async (event) => { await window.qBittorrent.Client.initializeCaches(); // switch to previously used tab - const previouslyUsedTab = LocalPreferences.get("selected_window_tab", "transfers"); + const previouslyUsedTab = localPreferences.get("selected_window_tab", "transfers"); switch (previouslyUsedTab) { case "search": if (window.qBittorrent.Client.isShowSearchEngine()) diff --git a/src/webui/www/private/scripts/color-scheme.js b/src/webui/www/private/scripts/color-scheme.js index d02fce243..3e41ddc52 100644 --- a/src/webui/www/private/scripts/color-scheme.js +++ b/src/webui/www/private/scripts/color-scheme.js @@ -36,12 +36,12 @@ window.qBittorrent.ColorScheme ??= (() => { }; }; - const LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); const colorSchemeQuery = window.matchMedia("(prefers-color-scheme: dark)"); const update = () => { const root = document.documentElement; - const colorScheme = LocalPreferences.get("color_scheme"); + const colorScheme = localPreferences.get("color_scheme"); const validScheme = (colorScheme === "light") || (colorScheme === "dark"); const isDark = colorSchemeQuery.matches; root.classList.toggle("dark", ((!validScheme && isDark) || (colorScheme === "dark"))); diff --git a/src/webui/www/private/scripts/dynamicTable.js b/src/webui/www/private/scripts/dynamicTable.js index 4e01af1f2..ec3eaf303 100644 --- a/src/webui/www/private/scripts/dynamicTable.js +++ b/src/webui/www/private/scripts/dynamicTable.js @@ -65,8 +65,7 @@ window.qBittorrent.DynamicTable ??= (() => { return 0; }; - if (typeof LocalPreferences === "undefined") - window.LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); class DynamicTable { #DynamicTableHeaderContextMenuClass = null; @@ -75,7 +74,7 @@ window.qBittorrent.DynamicTable ??= (() => { this.dynamicTableDivId = dynamicTableDivId; this.dynamicTableFixedHeaderDivId = dynamicTableFixedHeaderDivId; this.dynamicTableDiv = document.getElementById(dynamicTableDivId); - this.useVirtualList = useVirtualList && (LocalPreferences.get("use_virtual_list", "false") === "true"); + this.useVirtualList = useVirtualList && (localPreferences.get("use_virtual_list", "false") === "true"); this.fixedTableHeader = document.querySelector(`#${dynamicTableFixedHeaderDivId} thead tr`); this.hiddenTableHeader = this.dynamicTableDiv.querySelector("thead tr"); this.table = this.dynamicTableDiv.querySelector("table"); @@ -86,8 +85,8 @@ window.qBittorrent.DynamicTable ??= (() => { this.selectedRows = []; this.columns = []; this.contextMenu = contextMenu; - this.sortedColumn = LocalPreferences.get(`sorted_column_${this.dynamicTableDivId}`, 0); - this.reverseSort = LocalPreferences.get(`reverse_sort_${this.dynamicTableDivId}`, "0"); + this.sortedColumn = localPreferences.get(`sorted_column_${this.dynamicTableDivId}`, 0); + this.reverseSort = localPreferences.get(`reverse_sort_${this.dynamicTableDivId}`, "0"); this.initColumns(); this.loadColumnsOrder(); this.updateTableHeaders(); @@ -309,13 +308,13 @@ window.qBittorrent.DynamicTable ??= (() => { this.saveColumnWidth(this.resizeTh.columnName); if ((this.currentHeaderAction === "drag") && (el !== this.lastHoverTh)) { this.saveColumnsOrder(); - const val = LocalPreferences.get(`columns_order_${this.dynamicTableDivId}`).split(","); + const val = localPreferences.get(`columns_order_${this.dynamicTableDivId}`).split(","); val.erase(el.columnName); let pos = val.indexOf(this.lastHoverTh.columnName); if (this.dropSide === "right") ++pos; val.splice(pos, 0, el.columnName); - LocalPreferences.set(`columns_order_${this.dynamicTableDivId}`, val.join(",")); + localPreferences.set(`columns_order_${this.dynamicTableDivId}`, val.join(",")); this.loadColumnsOrder(); this.updateTableHeaders(); this.tableBody.replaceChildren(); @@ -393,7 +392,7 @@ window.qBittorrent.DynamicTable ??= (() => { showColumn(columnName, show) { this.columns[columnName].visible = show ? "1" : "0"; - LocalPreferences.set(`column_${columnName}_visible_${this.dynamicTableDivId}`, show ? "1" : "0"); + localPreferences.set(`column_${columnName}_visible_${this.dynamicTableDivId}`, show ? "1" : "0"); this.updateColumn(columnName); this.columns[columnName].onVisibilityChange?.(columnName); } @@ -463,7 +462,7 @@ window.qBittorrent.DynamicTable ??= (() => { } saveColumnWidth(columnName) { - LocalPreferences.set(`column_${columnName}_width_${this.dynamicTableDivId}`, this.columns[columnName].width); + localPreferences.set(`column_${columnName}_width_${this.dynamicTableDivId}`, this.columns[columnName].width); } setupHeaderMenu() { @@ -561,11 +560,11 @@ window.qBittorrent.DynamicTable ??= (() => { const column = {}; column["name"] = name; column["title"] = name; - column["visible"] = LocalPreferences.get(`column_${name}_visible_${this.dynamicTableDivId}`, (defaultVisible ? "1" : "0")); + column["visible"] = localPreferences.get(`column_${name}_visible_${this.dynamicTableDivId}`, (defaultVisible ? "1" : "0")); column["force_hide"] = false; column["caption"] = caption; column["style"] = style; - column["width"] = LocalPreferences.get(`column_${name}_width_${this.dynamicTableDivId}`, defaultWidth); + column["width"] = localPreferences.get(`column_${name}_width_${this.dynamicTableDivId}`, defaultWidth); column["dataProperties"] = [name]; column["getRowValue"] = function(row, pos) { if (pos === undefined) @@ -600,7 +599,7 @@ window.qBittorrent.DynamicTable ??= (() => { loadColumnsOrder() { const columnsOrder = []; - const val = LocalPreferences.get(`columns_order_${this.dynamicTableDivId}`); + const val = localPreferences.get(`columns_order_${this.dynamicTableDivId}`); if ((val === null) || (val === undefined)) return; for (const v of val.split(",")) { @@ -624,7 +623,7 @@ window.qBittorrent.DynamicTable ??= (() => { val += ","; val += this.columns[i].name; } - LocalPreferences.set(`columns_order_${this.dynamicTableDivId}`, val); + localPreferences.set(`columns_order_${this.dynamicTableDivId}`, val); } updateTableHeaders() { @@ -674,7 +673,7 @@ window.qBittorrent.DynamicTable ??= (() => { } getSortedColumn() { - return LocalPreferences.get(`sorted_column_${this.dynamicTableDivId}`); + return localPreferences.get(`sorted_column_${this.dynamicTableDivId}`); } /** @@ -693,8 +692,8 @@ window.qBittorrent.DynamicTable ??= (() => { this.reverseSort = reverse ?? (this.reverseSort === "0" ? "1" : "0"); this.setSortedColumnIcon(column, null, (this.reverseSort === "1")); } - LocalPreferences.set(`sorted_column_${this.dynamicTableDivId}`, column); - LocalPreferences.set(`reverse_sort_${this.dynamicTableDivId}`, this.reverseSort); + localPreferences.set(`sorted_column_${this.dynamicTableDivId}`, column); + localPreferences.set(`reverse_sort_${this.dynamicTableDivId}`, this.reverseSort); this.updateTable(false); } @@ -729,7 +728,7 @@ window.qBittorrent.DynamicTable ??= (() => { } setupAltRow() { - const useAltRowColors = (LocalPreferences.get("use_alt_row_colors", "true") === "true"); + const useAltRowColors = (localPreferences.get("use_alt_row_colors", "true") === "true"); if (useAltRowColors) document.getElementById(this.dynamicTableDivId).classList.add("altRowColors"); } @@ -1807,7 +1806,7 @@ window.qBittorrent.DynamicTable ??= (() => { ? "dblclick_download" : "dblclick_complete"; - if (LocalPreferences.get(prefKey, "1") !== "1") + if (localPreferences.get(prefKey, "1") !== "1") return true; if (state.includes("stopped")) @@ -2841,9 +2840,9 @@ window.qBittorrent.DynamicTable ??= (() => { initColumns() { // Blocks saving header width (because window width isn't saved) - LocalPreferences.remove(`column_checked_width_${this.dynamicTableDivId}`); - LocalPreferences.remove(`column_original_width_${this.dynamicTableDivId}`); - LocalPreferences.remove(`column_renamed_width_${this.dynamicTableDivId}`); + localPreferences.remove(`column_checked_width_${this.dynamicTableDivId}`); + localPreferences.remove(`column_original_width_${this.dynamicTableDivId}`); + localPreferences.remove(`column_renamed_width_${this.dynamicTableDivId}`); this.newColumn("checked", "", "", 50, true); this.newColumn("original", "", "QBT_TR(Original)QBT_TR[CONTEXT=TrackerListWidget]", 270, true); this.newColumn("renamed", "", "QBT_TR(Renamed)QBT_TR[CONTEXT=TrackerListWidget]", 220, true); diff --git a/src/webui/www/private/scripts/mocha-init.js b/src/webui/www/private/scripts/mocha-init.js index e6feb940d..ada3a87b3 100644 --- a/src/webui/www/private/scripts/mocha-init.js +++ b/src/webui/www/private/scripts/mocha-init.js @@ -108,8 +108,6 @@ window.qBittorrent.Dialog ??= (() => { })(); Object.freeze(window.qBittorrent.Dialog); -const LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); - let saveWindowSize = () => {}; let loadWindowWidth = () => {}; let loadWindowHeight = () => {}; @@ -159,23 +157,25 @@ let setQueuePositionFN = () => {}; let exportTorrentFN = () => {}; const initializeWindows = () => { + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + saveWindowSize = (windowName, windowId = windowName) => { const windowInstance = MochaUI.Windows.instances[windowId]; const size = windowInstance.contentWrapperEl.getSize(); - LocalPreferences.set(`window_${windowName}_width`, size.x); - LocalPreferences.set(`window_${windowName}_height`, size.y); + localPreferences.set(`window_${windowName}_width`, size.x); + localPreferences.set(`window_${windowName}_height`, size.y); }; loadWindowWidth = (windowId, defaultValue, limitToViewportWidth = true) => { if (limitToViewportWidth) defaultValue = window.qBittorrent.Dialog.limitWidthToViewport(defaultValue); - return LocalPreferences.get(`window_${windowId}_width`, defaultValue); + return localPreferences.get(`window_${windowId}_width`, defaultValue); }; loadWindowHeight = (windowId, defaultValue, limitToViewportHeight = true) => { if (limitToViewportHeight) defaultValue = window.qBittorrent.Dialog.limitHeightToViewport(defaultValue); - return LocalPreferences.get(`window_${windowId}_height`, defaultValue); + return localPreferences.get(`window_${windowId}_height`, defaultValue); }; const addClickEvent = (el, fn) => { diff --git a/src/webui/www/private/scripts/search.js b/src/webui/www/private/scripts/search.js index 0d5a2913d..cafc02229 100644 --- a/src/webui/www/private/scripts/search.js +++ b/src/webui/www/private/scripts/search.js @@ -46,6 +46,8 @@ window.qBittorrent.Search ??= (() => { }; }; + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + const searchTabIdPrefix = "Search-"; let loadSearchPluginsTimer = -1; const searchPlugins = []; @@ -108,7 +110,7 @@ window.qBittorrent.Search ??= (() => { const init = () => { // load "Search in" preference from local storage - document.getElementById("searchInTorrentName").value = (LocalPreferences.get("search_in_filter") === "names") ? "names" : "everywhere"; + document.getElementById("searchInTorrentName").value = (localPreferences.get("search_in_filter") === "names") ? "names" : "everywhere"; const searchResultsTableContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({ targets: "#searchResultsTableDiv tbody tr", menu: "searchResultsTableMenu", @@ -160,7 +162,7 @@ window.qBittorrent.Search ??= (() => { }); // restore search tabs - const searchJobs = JSON.parse(LocalPreferences.get("search_jobs", "[]")); + const searchJobs = JSON.parse(localPreferences.get("search_jobs", "[]")); for (const { id, pattern } of searchJobs) createSearchTab(id, pattern); }; @@ -241,11 +243,11 @@ window.qBittorrent.Search ??= (() => { }) }); - const searchJobs = JSON.parse(LocalPreferences.get("search_jobs", "[]")); + const searchJobs = JSON.parse(localPreferences.get("search_jobs", "[]")); const jobIndex = searchJobs.findIndex((job) => job.id === oldSearchId); if (jobIndex >= 0) { searchJobs[jobIndex].id = searchId; - LocalPreferences.set("search_jobs", JSON.stringify(searchJobs)); + localPreferences.set("search_jobs", JSON.stringify(searchJobs)); } // update existing tab w/ new search id @@ -292,11 +294,11 @@ window.qBittorrent.Search ??= (() => { }) }); - const searchJobs = JSON.parse(LocalPreferences.get("search_jobs", "[]")); + const searchJobs = JSON.parse(localPreferences.get("search_jobs", "[]")); const jobIndex = searchJobs.findIndex((job) => job.id === searchId); if (jobIndex >= 0) { searchJobs.splice(jobIndex, 1); - LocalPreferences.set("search_jobs", JSON.stringify(searchJobs)); + localPreferences.set("search_jobs", JSON.stringify(searchJobs)); } if (numSearchTabs() === 0) { @@ -450,9 +452,9 @@ window.qBittorrent.Search ??= (() => { const searchId = responseJSON.id; createSearchTab(searchId, pattern); - const searchJobs = JSON.parse(LocalPreferences.get("search_jobs", "[]")); + const searchJobs = JSON.parse(localPreferences.get("search_jobs", "[]")); searchJobs.push({ id: searchId, pattern: pattern }); - LocalPreferences.set("search_jobs", JSON.stringify(searchJobs)); + localPreferences.set("search_jobs", JSON.stringify(searchJobs)); }); }; @@ -802,7 +804,7 @@ window.qBittorrent.Search ??= (() => { }; const searchInTorrentName = () => { - LocalPreferences.set("search_in_filter", getSearchInTorrentName()); + localPreferences.set("search_in_filter", getSearchInTorrentName()); searchFilterChanged(); }; diff --git a/src/webui/www/private/views/createtorrent.html b/src/webui/www/private/views/createtorrent.html index a85e5a57d..d6c1f6a73 100644 --- a/src/webui/www/private/views/createtorrent.html +++ b/src/webui/www/private/views/createtorrent.html @@ -127,6 +127,8 @@ }; }; + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + const formatUrls = (urls) => { return urls.split("\n").map(encodeURIComponent).join("|"); }; @@ -207,11 +209,11 @@ comments: document.getElementById("comments").value, source: document.getElementById("source").value, }; - LocalPreferences.set("torrent_creator", JSON.stringify(preference)); + localPreferences.set("torrent_creator", JSON.stringify(preference)); }; const loadPreference = () => { - const preference = JSON.parse(LocalPreferences.get("torrent_creator") ?? "{}"); + const preference = JSON.parse(localPreferences.get("torrent_creator") ?? "{}"); document.getElementById("sourcePath").value = preference.sourcePath ?? ""; document.getElementById("torrentFormat").value = preference.torrentFormat ?? "hybrid"; document.getElementById("pieceSize").value = preference.pieceSize ?? 0; diff --git a/src/webui/www/private/views/filters.html b/src/webui/www/private/views/filters.html index 623990c1a..5c8f0404a 100644 --- a/src/webui/www/private/views/filters.html +++ b/src/webui/www/private/views/filters.html @@ -82,9 +82,11 @@ }; }; + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + const toggleCategoryDisplay = (filterItemID) => { const filterItem = document.getElementById(filterItemID); - LocalPreferences.set(`category_${filterItemID}_collapsed`, filterItem.classList.toggle("collapsedCategory").toString()); + localPreferences.set(`category_${filterItemID}_collapsed`, filterItem.classList.toggle("collapsedCategory").toString()); }; new window.qBittorrent.ContextMenu.StatusesFilterContextMenu({ @@ -222,16 +224,16 @@ } }); - if (LocalPreferences.get("filter_status_collapsed") === "true") + if (localPreferences.get("filter_status_collapsed") === "true") toggleFilterDisplay("statusFilterList"); - if (LocalPreferences.get("filter_category_collapsed") === "true") + if (localPreferences.get("filter_category_collapsed") === "true") toggleFilterDisplay("categoryFilterList"); - if (LocalPreferences.get("filter_tag_collapsed") === "true") + if (localPreferences.get("filter_tag_collapsed") === "true") toggleFilterDisplay("tagFilterList"); - if (LocalPreferences.get("filter_tracker_collapsed") === "true") + if (localPreferences.get("filter_tracker_collapsed") === "true") toggleFilterDisplay("trackerFilterList"); document.getElementById("Filters_pad").addEventListener("click", (event) => { @@ -261,7 +263,7 @@ }); document.getElementById("Filters_pad").addEventListener("dblclick", (event) => { - if (LocalPreferences.get("dblclick_filter", "1") !== "1") + if (localPreferences.get("dblclick_filter", "1") !== "1") return; const filterItem = event.target.closest("li"); diff --git a/src/webui/www/private/views/log.html b/src/webui/www/private/views/log.html index 052e50390..d7d13a0ec 100644 --- a/src/webui/www/private/views/log.html +++ b/src/webui/www/private/views/log.html @@ -182,10 +182,12 @@ } }; + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + let logFilterTimer = -1; let inputtedFilterText = ""; let selectBox; - let selectedLogLevels = JSON.parse(LocalPreferences.get("qbt_selected_log_levels")) || ["1", "2", "4", "8"]; + let selectedLogLevels = JSON.parse(localPreferences.get("qbt_selected_log_levels")) || ["1", "2", "4", "8"]; const init = () => { for (const option of document.getElementById("logLevelSelect").options) @@ -275,7 +277,7 @@ if (selectedLogLevels !== value) { tableInfo[currentSelectedTab].last_id = -1; selectedLogLevels = value; - LocalPreferences.set("qbt_selected_log_levels", JSON.stringify(selectedLogLevels)); + localPreferences.set("qbt_selected_log_levels", JSON.stringify(selectedLogLevels)); logFilterChanged(); } }; diff --git a/src/webui/www/private/views/preferences.html b/src/webui/www/private/views/preferences.html index 581de9651..7325197cf 100644 --- a/src/webui/www/private/views/preferences.html +++ b/src/webui/www/private/views/preferences.html @@ -1797,6 +1797,8 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD }; }; + const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); + // Behavior tab const numberInputLimiter = (input) => { const inputNumber = Number(input.value); @@ -2217,7 +2219,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD const updateColoSchemeSelect = () => { const combobox = document.getElementById("colorSchemeSelect"); - const colorScheme = LocalPreferences.get("color_scheme"); + const colorScheme = localPreferences.get("color_scheme"); if (colorScheme === "light") combobox.options[1].selected = true; @@ -2236,14 +2238,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD updateColoSchemeSelect(); document.getElementById("statusBarExternalIP").checked = pref.status_bar_external_ip; document.getElementById("performanceWarning").checked = pref.performance_warning; - document.getElementById("displayFullURLTrackerColumn").checked = (LocalPreferences.get("full_url_tracker_column", "false") === "true"); - document.getElementById("useVirtualList").checked = (LocalPreferences.get("use_virtual_list", "false") === "true"); - document.getElementById("hideZeroFiltersCheckbox").checked = (LocalPreferences.get("hide_zero_status_filters", "false") === "true"); - document.getElementById("dblclickDownloadSelect").value = LocalPreferences.get("dblclick_download", "1"); - document.getElementById("dblclickCompleteSelect").value = LocalPreferences.get("dblclick_complete", "1"); - document.getElementById("dblclickFiltersSelect").value = LocalPreferences.get("dblclick_filter", "1"); + document.getElementById("displayFullURLTrackerColumn").checked = (localPreferences.get("full_url_tracker_column", "false") === "true"); + document.getElementById("useVirtualList").checked = (localPreferences.get("use_virtual_list", "false") === "true"); + document.getElementById("hideZeroFiltersCheckbox").checked = (localPreferences.get("hide_zero_status_filters", "false") === "true"); + document.getElementById("dblclickDownloadSelect").value = localPreferences.get("dblclick_download", "1"); + document.getElementById("dblclickCompleteSelect").value = localPreferences.get("dblclick_complete", "1"); + document.getElementById("dblclickFiltersSelect").value = localPreferences.get("dblclick_filter", "1"); document.getElementById("confirmTorrentDeletion").checked = pref.confirm_torrent_deletion; - document.getElementById("useAltRowColorsInput").checked = (LocalPreferences.get("use_alt_row_colors", "true") === "true"); + document.getElementById("useAltRowColorsInput").checked = (localPreferences.get("use_alt_row_colors", "true") === "true"); document.getElementById("filelog_checkbox").checked = pref.file_log_enabled; document.getElementById("filelog_save_path_input").value = pref.file_log_path; document.getElementById("filelog_backup_checkbox").checked = pref.file_log_backup_enabled; @@ -2665,21 +2667,21 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD settings["locale"] = document.getElementById("locale_select").value; const colorScheme = Number(document.getElementById("colorSchemeSelect").value); if (colorScheme === 0) - LocalPreferences.remove("color_scheme"); + localPreferences.remove("color_scheme"); else if (colorScheme === 1) - LocalPreferences.set("color_scheme", "light"); + localPreferences.set("color_scheme", "light"); else - LocalPreferences.set("color_scheme", "dark"); + localPreferences.set("color_scheme", "dark"); settings["status_bar_external_ip"] = document.getElementById("statusBarExternalIP").checked; settings["performance_warning"] = document.getElementById("performanceWarning").checked; - LocalPreferences.set("full_url_tracker_column", document.getElementById("displayFullURLTrackerColumn").checked.toString()); - LocalPreferences.set("use_virtual_list", document.getElementById("useVirtualList").checked.toString()); - LocalPreferences.set("hide_zero_status_filters", document.getElementById("hideZeroFiltersCheckbox").checked.toString()); - LocalPreferences.set("dblclick_download", document.getElementById("dblclickDownloadSelect").value); - LocalPreferences.set("dblclick_complete", document.getElementById("dblclickCompleteSelect").value); - LocalPreferences.set("dblclick_filter", document.getElementById("dblclickFiltersSelect").value); + localPreferences.set("full_url_tracker_column", document.getElementById("displayFullURLTrackerColumn").checked.toString()); + localPreferences.set("use_virtual_list", document.getElementById("useVirtualList").checked.toString()); + localPreferences.set("hide_zero_status_filters", document.getElementById("hideZeroFiltersCheckbox").checked.toString()); + localPreferences.set("dblclick_download", document.getElementById("dblclickDownloadSelect").value); + localPreferences.set("dblclick_complete", document.getElementById("dblclickCompleteSelect").value); + localPreferences.set("dblclick_filter", document.getElementById("dblclickFiltersSelect").value); settings["confirm_torrent_deletion"] = document.getElementById("confirmTorrentDeletion").checked; - LocalPreferences.set("use_alt_row_colors", document.getElementById("useAltRowColorsInput").checked.toString()); + localPreferences.set("use_alt_row_colors", document.getElementById("useAltRowColorsInput").checked.toString()); settings["file_log_enabled"] = document.getElementById("filelog_checkbox").checked; settings["file_log_path"] = document.getElementById("filelog_save_path_input").value; settings["file_log_backup_enabled"] = document.getElementById("filelog_backup_checkbox").checked;