WebUI: use local preference class locally

This commit is contained in:
Chocobo1
2025-08-27 17:34:50 +08:00
parent 07f2afc4ac
commit b851caa6b9
11 changed files with 149 additions and 137 deletions

View File

@@ -76,48 +76,50 @@
const fileRenamer = new window.qBittorrent.MultiRename.RenameFiles(); const fileRenamer = new window.qBittorrent.MultiRename.RenameFiles();
fileRenamer.hash = data.hash; fileRenamer.hash = data.hash;
const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
// Load Multi Rename Preferences // 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; document.getElementById("multirename_rememberprefs_checkbox").checked = multiRenamePrefChecked;
if (multiRenamePrefChecked) { if (multiRenamePrefChecked) {
const multirename_search = LocalPreferences.get("multirename_search", ""); const multirename_search = localPreferences.get("multirename_search", "");
fileRenamer.setSearch(multirename_search); fileRenamer.setSearch(multirename_search);
document.getElementById("multiRenameSearch").value = 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"; fileRenamer.useRegex = multirename_useRegex === "true";
document.getElementById("use_regex_search").checked = fileRenamer.useRegex; 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"; fileRenamer.matchAllOccurrences = multirename_matchAllOccurrences === "true";
document.getElementById("match_all_occurrences").checked = fileRenamer.matchAllOccurrences; 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"; fileRenamer.caseSensitive = multirename_caseSensitive === "true";
document.getElementById("case_sensitive").checked = fileRenamer.caseSensitive; 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); fileRenamer.setReplacement(multirename_replace);
document.getElementById("multiRenameReplace").value = 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]; fileRenamer.appliesTo = window.qBittorrent.MultiRename.AppliesTo[multirename_appliesTo];
document.getElementById("applies_to_option").value = fileRenamer.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"; fileRenamer.includeFiles = multirename_includeFiles === "true";
document.getElementById("include_files").checked = fileRenamer.includeFiles; 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"; fileRenamer.includeFolders = multirename_includeFolders === "true";
document.getElementById("include_folders").checked = fileRenamer.includeFolders; 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); fileRenamer.fileEnumerationStart = Number(multirename_fileEnumerationStart);
document.getElementById("file_counter").value = fileRenamer.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"; fileRenamer.replaceAll = multirename_replaceAll === "true";
const renameButtonValue = fileRenamer.replaceAll ? "Replace All" : "Replace"; const renameButtonValue = fileRenamer.replaceAll ? "Replace All" : "Replace";
document.getElementById("renameOptions").value = renameButtonValue; document.getElementById("renameOptions").value = renameButtonValue;
@@ -137,22 +139,22 @@
// Search input has changed // Search input has changed
document.getElementById("multiRenameSearch").style["border-color"] = ""; document.getElementById("multiRenameSearch").style["border-color"] = "";
LocalPreferences.set("multirename_search", sanitized); localPreferences.set("multirename_search", sanitized);
fileRenamer.setSearch(sanitized); fileRenamer.setSearch(sanitized);
}); });
document.getElementById("use_regex_search").addEventListener("change", (e) => { document.getElementById("use_regex_search").addEventListener("change", (e) => {
fileRenamer.useRegex = e.target.checked; fileRenamer.useRegex = e.target.checked;
LocalPreferences.set("multirename_useRegex", e.target.checked); localPreferences.set("multirename_useRegex", e.target.checked);
fileRenamer.update(); fileRenamer.update();
}); });
document.getElementById("match_all_occurrences").addEventListener("change", (e) => { document.getElementById("match_all_occurrences").addEventListener("change", (e) => {
fileRenamer.matchAllOccurrences = e.target.checked; fileRenamer.matchAllOccurrences = e.target.checked;
LocalPreferences.set("multirename_matchAllOccurrences", e.target.checked); localPreferences.set("multirename_matchAllOccurrences", e.target.checked);
fileRenamer.update(); fileRenamer.update();
}); });
document.getElementById("case_sensitive").addEventListener("change", (e) => { document.getElementById("case_sensitive").addEventListener("change", (e) => {
fileRenamer.caseSensitive = e.target.checked; fileRenamer.caseSensitive = e.target.checked;
LocalPreferences.set("multirename_caseSensitive", e.target.checked); localPreferences.set("multirename_caseSensitive", e.target.checked);
fileRenamer.update(); fileRenamer.update();
}); });
@@ -184,22 +186,22 @@
// Replace input has changed // Replace input has changed
document.getElementById("multiRenameReplace").style["border-color"] = ""; document.getElementById("multiRenameReplace").style["border-color"] = "";
LocalPreferences.set("multirename_replace", sanitized); localPreferences.set("multirename_replace", sanitized);
fileRenamer.setReplacement(sanitized); fileRenamer.setReplacement(sanitized);
}); });
document.getElementById("applies_to_option").addEventListener("change", (e) => { document.getElementById("applies_to_option").addEventListener("change", (e) => {
fileRenamer.appliesTo = e.target.value; fileRenamer.appliesTo = e.target.value;
LocalPreferences.set("multirename_appliesTo", e.target.value); localPreferences.set("multirename_appliesTo", e.target.value);
fileRenamer.update(); fileRenamer.update();
}); });
document.getElementById("include_files").addEventListener("change", (e) => { document.getElementById("include_files").addEventListener("change", (e) => {
fileRenamer.includeFiles = e.target.checked; fileRenamer.includeFiles = e.target.checked;
LocalPreferences.set("multirename_includeFiles", e.target.checked); localPreferences.set("multirename_includeFiles", e.target.checked);
fileRenamer.update(); fileRenamer.update();
}); });
document.getElementById("include_folders").addEventListener("change", (e) => { document.getElementById("include_folders").addEventListener("change", (e) => {
fileRenamer.includeFolders = e.target.checked; fileRenamer.includeFolders = e.target.checked;
LocalPreferences.set("multirename_includeFolders", e.target.checked); localPreferences.set("multirename_includeFolders", e.target.checked);
fileRenamer.update(); fileRenamer.update();
}); });
document.getElementById("file_counter").addEventListener("input", (e) => { document.getElementById("file_counter").addEventListener("input", (e) => {
@@ -212,7 +214,7 @@
value = 99999999; value = 99999999;
fileRenamer.fileEnumerationStart = value; fileRenamer.fileEnumerationStart = value;
document.getElementById("file_counter").value = value; document.getElementById("file_counter").value = value;
LocalPreferences.set("multirename_fileEnumerationStart", value); localPreferences.set("multirename_fileEnumerationStart", value);
fileRenamer.update(); fileRenamer.update();
}); });
@@ -278,7 +280,7 @@
fileRenamer.replaceAll = true; fileRenamer.replaceAll = true;
else else
fileRenamer.replaceAll = false; fileRenamer.replaceAll = false;
LocalPreferences.set("multirename_replaceAll", fileRenamer.replaceAll); localPreferences.set("multirename_replaceAll", fileRenamer.replaceAll);
document.getElementById("renameButton").value = replaceOperation; document.getElementById("renameButton").value = replaceOperation;
}); });
document.getElementById("closeButton").addEventListener("click", (event) => { document.getElementById("closeButton").addEventListener("click", (event) => {
@@ -400,7 +402,7 @@
<div style="padding: 0px 10px 0px 0px;"> <div style="padding: 0px 10px 0px 0px;">
<div style="float: left; height: 100%; width: 228px;"> <div style="float: left; height: 100%; width: 228px;">
<div class="formRow"> <div class="formRow">
<input type="checkbox" id="multirename_rememberprefs_checkbox" onchange="LocalPreferences.set('multirename_rememberPreferences', this.checked);"> <input type="checkbox" id="multirename_rememberprefs_checkbox" onchange="localPreferences.set('multirename_rememberPreferences', this.checked);">
<label for="multirename_rememberprefs_checkbox">QBT_TR(Remember Multi-Rename settings)QBT_TR[CONTEXT=OptionsDialog]</label> <label for="multirename_rememberprefs_checkbox">QBT_TR(Remember Multi-Rename settings)QBT_TR[CONTEXT=OptionsDialog]</label>
</div> </div>
<hr> <hr>

View File

@@ -43,10 +43,10 @@ window.qBittorrent.AddTorrent ??= (() => {
let windowId = ""; let windowId = "";
let source = ""; let source = "";
const LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences(); const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
const getCategories = () => { const getCategories = () => {
const defaultCategory = LocalPreferences.get("add_torrent_default_category", ""); const defaultCategory = localPreferences.get("add_torrent_default_category", "");
const categorySelect = document.getElementById("categorySelect"); const categorySelect = document.getElementById("categorySelect");
for (const name of window.parent.qBittorrent.Client.categoryMap.keys()) { for (const name of window.parent.qBittorrent.Client.categoryMap.keys()) {
const option = document.createElement("option"); const option = document.createElement("option");
@@ -312,9 +312,9 @@ window.qBittorrent.AddTorrent ??= (() => {
if (document.getElementById("setDefaultCategory").checked) { if (document.getElementById("setDefaultCategory").checked) {
const category = document.getElementById("category").value.trim(); const category = document.getElementById("category").value.trim();
if (category.length === 0) if (category.length === 0)
LocalPreferences.remove("add_torrent_default_category"); localPreferences.remove("add_torrent_default_category");
else else
LocalPreferences.set("add_torrent_default_category", category); localPreferences.set("add_torrent_default_category", category);
} }
}; };

View File

@@ -212,6 +212,7 @@ Object.freeze(window.qBittorrent.Client);
window.qBittorrent.Client.setup(); window.qBittorrent.Client.setup();
// TODO: move global functions/variables into some namespace/scope // TODO: move global functions/variables into some namespace/scope
const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
this.torrentsTable = new window.qBittorrent.DynamicTable.TorrentsTable(); this.torrentsTable = new window.qBittorrent.DynamicTable.TorrentsTable();
@@ -223,21 +224,21 @@ let queueing_enabled = true;
let serverSyncMainDataInterval = 1500; let serverSyncMainDataInterval = 1500;
let customSyncMainDataInterval = null; let customSyncMainDataInterval = null;
let useSubcategories = true; let useSubcategories = true;
const useAutoHideZeroStatusFilters = LocalPreferences.get("hide_zero_status_filters", "false") === "true"; const useAutoHideZeroStatusFilters = localPreferences.get("hide_zero_status_filters", "false") === "true";
const displayFullURLTrackerColumn = LocalPreferences.get("full_url_tracker_column", "false") === "true"; const displayFullURLTrackerColumn = localPreferences.get("full_url_tracker_column", "false") === "true";
/* Categories filter */ /* Categories filter */
const CATEGORIES_ALL = "b4af0e4c-e76d-4bac-a392-46cbc18d9655"; const CATEGORIES_ALL = "b4af0e4c-e76d-4bac-a392-46cbc18d9655";
const CATEGORIES_UNCATEGORIZED = "e24bd469-ea22-404c-8e2e-a17c82f37ea0"; 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 = () => {}; let setCategoryFilter = () => {};
/* Tags filter */ /* Tags filter */
const TAGS_ALL = "b4af0e4c-e76d-4bac-a392-46cbc18d9655"; const TAGS_ALL = "b4af0e4c-e76d-4bac-a392-46cbc18d9655";
const TAGS_UNTAGGED = "e24bd469-ea22-404c-8e2e-a17c82f37ea0"; 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 = () => {}; let setTagFilter = () => {};
/* Trackers filter */ /* Trackers filter */
@@ -250,11 +251,11 @@ const TRACKERS_WARNING = "82a702c5-210c-412b-829f-97632d7557e9";
// Map<trackerHost: String, Map<trackerURL: String, torrents: Set>> // Map<trackerHost: String, Map<trackerURL: String, torrents: Set>>
const trackerMap = new Map(); const trackerMap = new Map();
let selectedTracker = LocalPreferences.get("selected_tracker", TRACKERS_ALL); let selectedTracker = localPreferences.get("selected_tracker", TRACKERS_ALL);
let setTrackerFilter = () => {}; let setTrackerFilter = () => {};
/* All filters */ /* All filters */
let selectedStatus = LocalPreferences.get("selected_filter", "all"); let selectedStatus = localPreferences.get("selected_filter", "all");
let setStatusFilter = () => {}; let setStatusFilter = () => {};
let toggleFilterDisplay = () => {}; let toggleFilterDisplay = () => {};
@@ -267,9 +268,9 @@ window.addEventListener("DOMContentLoaded", (event) => {
const saveColumnSizes = () => { const saveColumnSizes = () => {
const filters_width = document.getElementById("Filters").getSize().x; 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; 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) => { window.addEventListener("resize", window.qBittorrent.Misc.createDebounceHandler(500, (e) => {
@@ -290,7 +291,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
onResize: window.qBittorrent.Misc.createDebounceHandler(500, (e) => { onResize: window.qBittorrent.Misc.createDebounceHandler(500, (e) => {
saveColumnSizes(); saveColumnSizes();
}), }),
width: Number(LocalPreferences.get("filters_width", 210)), width: Number(localPreferences.get("filters_width", 210)),
resizeLimit: [1, 1000] resizeLimit: [1, 1000]
}); });
new MochaUI.Column({ new MochaUI.Column({
@@ -352,7 +353,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
setStatusFilter = (name) => { setStatusFilter = (name) => {
const currentHash = torrentsTable.getCurrentTorrentID(); const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_filter", name); localPreferences.set("selected_filter", name);
selectedStatus = name; selectedStatus = name;
highlightSelectedStatus(); highlightSelectedStatus();
updateMainData(); updateMainData();
@@ -364,7 +365,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
setCategoryFilter = (category) => { setCategoryFilter = (category) => {
const currentHash = torrentsTable.getCurrentTorrentID(); const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_category", category); localPreferences.set("selected_category", category);
selectedCategory = category; selectedCategory = category;
highlightSelectedCategory(); highlightSelectedCategory();
updateMainData(); updateMainData();
@@ -376,7 +377,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
setTagFilter = (tag) => { setTagFilter = (tag) => {
const currentHash = torrentsTable.getCurrentTorrentID(); const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_tag", tag); localPreferences.set("selected_tag", tag);
selectedTag = tag; selectedTag = tag;
highlightSelectedTag(); highlightSelectedTag();
updateMainData(); updateMainData();
@@ -388,7 +389,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
setTrackerFilter = (tracker) => { setTrackerFilter = (tracker) => {
const currentHash = torrentsTable.getCurrentTorrentID(); const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_tracker", tracker); localPreferences.set("selected_tracker", tracker);
selectedTracker = tracker; selectedTracker = tracker;
highlightSelectedTracker(); highlightSelectedTracker();
updateMainData(); updateMainData();
@@ -402,7 +403,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
const filterTitle = filterList.previousElementSibling; const filterTitle = filterList.previousElementSibling;
const toggleIcon = filterTitle.firstElementChild; const toggleIcon = filterTitle.firstElementChild;
toggleIcon.classList.toggle("rotate"); 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({ new MochaUI.Panel({
@@ -426,35 +427,35 @@ window.addEventListener("DOMContentLoaded", (event) => {
initializeWindows(); initializeWindows();
// Show Top Toolbar is enabled by default // 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) { if (!showTopToolbar) {
document.getElementById("showTopToolbarLink").firstElementChild.style.opacity = "0"; document.getElementById("showTopToolbarLink").firstElementChild.style.opacity = "0";
document.getElementById("mochaToolbar").classList.add("invisible"); document.getElementById("mochaToolbar").classList.add("invisible");
} }
// Show Status Bar is enabled by default // 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) { if (!showStatusBar) {
document.getElementById("showStatusBarLink").firstElementChild.style.opacity = "0"; document.getElementById("showStatusBarLink").firstElementChild.style.opacity = "0";
document.getElementById("desktopFooterWrapper").classList.add("invisible"); document.getElementById("desktopFooterWrapper").classList.add("invisible");
} }
// Show Filters Sidebar is enabled by default // 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) { if (!showFiltersSidebar) {
document.getElementById("showFiltersSidebarLink").firstElementChild.style.opacity = "0"; document.getElementById("showFiltersSidebarLink").firstElementChild.style.opacity = "0";
document.getElementById("filtersColumn").classList.add("invisible"); document.getElementById("filtersColumn").classList.add("invisible");
document.getElementById("filtersColumn_handle").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) if (!speedInTitle)
document.getElementById("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "0"; document.getElementById("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "0";
// After showing/hiding the toolbar + status bar // After showing/hiding the toolbar + status bar
window.qBittorrent.Client.showSearchEngine(LocalPreferences.get("show_search_engine") !== "false"); window.qBittorrent.Client.showSearchEngine(localPreferences.get("show_search_engine") !== "false");
window.qBittorrent.Client.showRssReader(LocalPreferences.get("show_rss_reader") !== "false"); window.qBittorrent.Client.showRssReader(localPreferences.get("show_rss_reader") !== "false");
window.qBittorrent.Client.showLogViewer(LocalPreferences.get("show_log_viewer") === "true"); window.qBittorrent.Client.showLogViewer(localPreferences.get("show_log_viewer") === "true");
// After Show Top Toolbar // After Show Top Toolbar
MochaUI.Desktop.setDesktopSize(); MochaUI.Desktop.setDesktopSize();
@@ -617,8 +618,8 @@ window.addEventListener("DOMContentLoaded", (event) => {
stack.push({ parent: unorderedList, category: subcategory }); stack.push({ parent: unorderedList, category: subcategory });
} }
const categoryLocalPref = `category_${category.categoryName}_collapsed`; const categoryLocalPref = `category_${category.categoryName}_collapsed`;
const isCollapsed = !category.forceExpand && (LocalPreferences.get(categoryLocalPref, "false") === "true"); const isCollapsed = !category.forceExpand && (localPreferences.get(categoryLocalPref, "false") === "true");
LocalPreferences.set(categoryLocalPref, listItem.classList.toggle("collapsedCategory", isCollapsed).toString()); localPreferences.set(categoryLocalPref, listItem.classList.toggle("collapsedCategory", isCollapsed).toString());
} }
}; };
@@ -637,7 +638,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
...(useSubcategories && { ...(useSubcategories && {
children: [], children: [],
isRoot: true, 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); trackerMap.delete(host);
if (selectedTracker === host) { if (selectedTracker === host) {
selectedTracker = TRACKERS_ALL; 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) => { document.getElementById("showTopToolbarLink").addEventListener("click", (e) => {
showTopToolbar = !showTopToolbar; showTopToolbar = !showTopToolbar;
LocalPreferences.set("show_top_toolbar", showTopToolbar.toString()); localPreferences.set("show_top_toolbar", showTopToolbar.toString());
if (showTopToolbar) { if (showTopToolbar) {
document.getElementById("showTopToolbarLink").firstElementChild.style.opacity = "1"; document.getElementById("showTopToolbarLink").firstElementChild.style.opacity = "1";
document.getElementById("mochaToolbar").classList.remove("invisible"); document.getElementById("mochaToolbar").classList.remove("invisible");
@@ -1237,7 +1238,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
document.getElementById("showStatusBarLink").addEventListener("click", (e) => { document.getElementById("showStatusBarLink").addEventListener("click", (e) => {
showStatusBar = !showStatusBar; showStatusBar = !showStatusBar;
LocalPreferences.set("show_status_bar", showStatusBar.toString()); localPreferences.set("show_status_bar", showStatusBar.toString());
if (showStatusBar) { if (showStatusBar) {
document.getElementById("showStatusBarLink").firstElementChild.style.opacity = "1"; document.getElementById("showStatusBarLink").firstElementChild.style.opacity = "1";
document.getElementById("desktopFooterWrapper").classList.remove("invisible"); document.getElementById("desktopFooterWrapper").classList.remove("invisible");
@@ -1274,7 +1275,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
document.getElementById("showFiltersSidebarLink").addEventListener("click", (e) => { document.getElementById("showFiltersSidebarLink").addEventListener("click", (e) => {
showFiltersSidebar = !showFiltersSidebar; showFiltersSidebar = !showFiltersSidebar;
LocalPreferences.set("show_filters_sidebar", showFiltersSidebar.toString()); localPreferences.set("show_filters_sidebar", showFiltersSidebar.toString());
if (showFiltersSidebar) { if (showFiltersSidebar) {
document.getElementById("showFiltersSidebarLink").firstElementChild.style.opacity = "1"; document.getElementById("showFiltersSidebarLink").firstElementChild.style.opacity = "1";
document.getElementById("filtersColumn").classList.remove("invisible"); document.getElementById("filtersColumn").classList.remove("invisible");
@@ -1290,7 +1291,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
document.getElementById("speedInBrowserTitleBarLink").addEventListener("click", (e) => { document.getElementById("speedInBrowserTitleBarLink").addEventListener("click", (e) => {
speedInTitle = !speedInTitle; speedInTitle = !speedInTitle;
LocalPreferences.set("speed_in_browser_title_bar", speedInTitle.toString()); localPreferences.set("speed_in_browser_title_bar", speedInTitle.toString());
if (speedInTitle) if (speedInTitle)
document.getElementById("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "1"; document.getElementById("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "1";
else else
@@ -1300,19 +1301,19 @@ window.addEventListener("DOMContentLoaded", (event) => {
document.getElementById("showSearchEngineLink").addEventListener("click", (e) => { document.getElementById("showSearchEngineLink").addEventListener("click", (e) => {
window.qBittorrent.Client.showSearchEngine(!window.qBittorrent.Client.isShowSearchEngine()); 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(); updateTabDisplay();
}); });
document.getElementById("showRssReaderLink").addEventListener("click", (e) => { document.getElementById("showRssReaderLink").addEventListener("click", (e) => {
window.qBittorrent.Client.showRssReader(!window.qBittorrent.Client.isShowRssReader()); 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(); updateTabDisplay();
}); });
document.getElementById("showLogViewerLink").addEventListener("click", (e) => { document.getElementById("showLogViewerLink").addEventListener("click", (e) => {
window.qBittorrent.Client.showLogViewer(!window.qBittorrent.Client.isShowLogViewer()); 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(); updateTabDisplay();
}); });
@@ -1369,7 +1370,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
// main window tabs // main window tabs
const showTransfersTab = () => { const showTransfersTab = () => {
const showFiltersSidebar = LocalPreferences.get("show_filters_sidebar", "true") === "true"; const showFiltersSidebar = localPreferences.get("show_filters_sidebar", "true") === "true";
if (showFiltersSidebar) { if (showFiltersSidebar) {
document.getElementById("filtersColumn").classList.remove("invisible"); document.getElementById("filtersColumn").classList.remove("invisible");
document.getElementById("filtersColumn_handle").classList.remove("invisible"); document.getElementById("filtersColumn_handle").classList.remove("invisible");
@@ -1384,7 +1385,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
hideRssTab(); hideRssTab();
hideLogTab(); hideLogTab();
LocalPreferences.set("selected_window_tab", "transfers"); localPreferences.set("selected_window_tab", "transfers");
}; };
const hideTransfersTab = () => { const hideTransfersTab = () => {
@@ -1420,7 +1421,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
hideRssTab(); hideRssTab();
hideLogTab(); hideLogTab();
LocalPreferences.set("selected_window_tab", "search"); localPreferences.set("selected_window_tab", "search");
}; };
})(); })();
@@ -1457,7 +1458,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
hideSearchTab(); hideSearchTab();
hideLogTab(); hideLogTab();
LocalPreferences.set("selected_window_tab", "rss"); localPreferences.set("selected_window_tab", "rss");
}; };
})(); })();
@@ -1495,7 +1496,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
hideSearchTab(); hideSearchTab();
hideRssTab(); hideRssTab();
LocalPreferences.set("selected_window_tab", "log"); localPreferences.set("selected_window_tab", "log");
}; };
})(); })();
@@ -1627,7 +1628,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
}), }),
height: null height: null
}); });
let prop_h = LocalPreferences.get("properties_height_rel"); let prop_h = localPreferences.get("properties_height_rel");
if (prop_h !== null) if (prop_h !== null)
prop_h = Number(prop_h) * Window.getSize().y; prop_h = Number(prop_h) * Window.getSize().y;
else else
@@ -1652,7 +1653,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
], ],
onload: () => { onload: () => {
updatePropertiesPanel = () => { updatePropertiesPanel = () => {
switch (LocalPreferences.get("selected_properties_tab")) { switch (localPreferences.get("selected_properties_tab")) {
case "propGeneralLink": case "propGeneralLink":
window.qBittorrent.PropGeneral.updateData(); window.qBittorrent.PropGeneral.updateData();
break; break;
@@ -1679,7 +1680,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
const togglePropertiesPanel = () => { const togglePropertiesPanel = () => {
this.collapseToggleEl.click(); this.collapseToggleEl.click();
LocalPreferences.set("properties_panel_collapsed", this.isCollapsed.toString()); localPreferences.set("properties_panel_collapsed", this.isCollapsed.toString());
}; };
const selectTab = (tabID) => { const selectTab = (tabID) => {
@@ -1692,17 +1693,17 @@ window.addEventListener("DOMContentLoaded", (event) => {
for (const tabContent of this.contentEl.children) for (const tabContent of this.contentEl.children)
tabContent.classList.toggle("invisible", tabContent.id !== tabContentID); tabContent.classList.toggle("invisible", tabContent.id !== tabContentID);
LocalPreferences.set("selected_properties_tab", tabID); localPreferences.set("selected_properties_tab", tabID);
} }
if (isAlreadySelected || this.isCollapsed) if (isAlreadySelected || this.isCollapsed)
togglePropertiesPanel(); togglePropertiesPanel();
}; };
const lastUsedTab = LocalPreferences.get("selected_properties_tab", "propGeneralLink"); const lastUsedTab = localPreferences.get("selected_properties_tab", "propGeneralLink");
selectTab(lastUsedTab); selectTab(lastUsedTab);
const startCollapsed = LocalPreferences.get("properties_panel_collapsed", "false") === "true"; const startCollapsed = localPreferences.get("properties_panel_collapsed", "false") === "true";
if (startCollapsed) if (startCollapsed)
togglePropertiesPanel(); togglePropertiesPanel();
@@ -1893,7 +1894,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
if (document.hidden) if (document.hidden)
return; return;
switch (LocalPreferences.get("selected_window_tab")) { switch (localPreferences.get("selected_window_tab")) {
case "log": case "log":
window.qBittorrent.Log.load(); window.qBittorrent.Log.load();
break; break;
@@ -1909,7 +1910,7 @@ window.addEventListener("load", async (event) => {
await window.qBittorrent.Client.initializeCaches(); await window.qBittorrent.Client.initializeCaches();
// switch to previously used tab // switch to previously used tab
const previouslyUsedTab = LocalPreferences.get("selected_window_tab", "transfers"); const previouslyUsedTab = localPreferences.get("selected_window_tab", "transfers");
switch (previouslyUsedTab) { switch (previouslyUsedTab) {
case "search": case "search":
if (window.qBittorrent.Client.isShowSearchEngine()) if (window.qBittorrent.Client.isShowSearchEngine())

View File

@@ -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 colorSchemeQuery = window.matchMedia("(prefers-color-scheme: dark)");
const update = () => { const update = () => {
const root = document.documentElement; const root = document.documentElement;
const colorScheme = LocalPreferences.get("color_scheme"); const colorScheme = localPreferences.get("color_scheme");
const validScheme = (colorScheme === "light") || (colorScheme === "dark"); const validScheme = (colorScheme === "light") || (colorScheme === "dark");
const isDark = colorSchemeQuery.matches; const isDark = colorSchemeQuery.matches;
root.classList.toggle("dark", ((!validScheme && isDark) || (colorScheme === "dark"))); root.classList.toggle("dark", ((!validScheme && isDark) || (colorScheme === "dark")));

View File

@@ -65,8 +65,7 @@ window.qBittorrent.DynamicTable ??= (() => {
return 0; return 0;
}; };
if (typeof LocalPreferences === "undefined") const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
window.LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
class DynamicTable { class DynamicTable {
#DynamicTableHeaderContextMenuClass = null; #DynamicTableHeaderContextMenuClass = null;
@@ -75,7 +74,7 @@ window.qBittorrent.DynamicTable ??= (() => {
this.dynamicTableDivId = dynamicTableDivId; this.dynamicTableDivId = dynamicTableDivId;
this.dynamicTableFixedHeaderDivId = dynamicTableFixedHeaderDivId; this.dynamicTableFixedHeaderDivId = dynamicTableFixedHeaderDivId;
this.dynamicTableDiv = document.getElementById(dynamicTableDivId); 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.fixedTableHeader = document.querySelector(`#${dynamicTableFixedHeaderDivId} thead tr`);
this.hiddenTableHeader = this.dynamicTableDiv.querySelector("thead tr"); this.hiddenTableHeader = this.dynamicTableDiv.querySelector("thead tr");
this.table = this.dynamicTableDiv.querySelector("table"); this.table = this.dynamicTableDiv.querySelector("table");
@@ -86,8 +85,8 @@ window.qBittorrent.DynamicTable ??= (() => {
this.selectedRows = []; this.selectedRows = [];
this.columns = []; this.columns = [];
this.contextMenu = contextMenu; this.contextMenu = contextMenu;
this.sortedColumn = LocalPreferences.get(`sorted_column_${this.dynamicTableDivId}`, 0); this.sortedColumn = localPreferences.get(`sorted_column_${this.dynamicTableDivId}`, 0);
this.reverseSort = LocalPreferences.get(`reverse_sort_${this.dynamicTableDivId}`, "0"); this.reverseSort = localPreferences.get(`reverse_sort_${this.dynamicTableDivId}`, "0");
this.initColumns(); this.initColumns();
this.loadColumnsOrder(); this.loadColumnsOrder();
this.updateTableHeaders(); this.updateTableHeaders();
@@ -309,13 +308,13 @@ window.qBittorrent.DynamicTable ??= (() => {
this.saveColumnWidth(this.resizeTh.columnName); this.saveColumnWidth(this.resizeTh.columnName);
if ((this.currentHeaderAction === "drag") && (el !== this.lastHoverTh)) { if ((this.currentHeaderAction === "drag") && (el !== this.lastHoverTh)) {
this.saveColumnsOrder(); this.saveColumnsOrder();
const val = LocalPreferences.get(`columns_order_${this.dynamicTableDivId}`).split(","); const val = localPreferences.get(`columns_order_${this.dynamicTableDivId}`).split(",");
val.erase(el.columnName); val.erase(el.columnName);
let pos = val.indexOf(this.lastHoverTh.columnName); let pos = val.indexOf(this.lastHoverTh.columnName);
if (this.dropSide === "right") if (this.dropSide === "right")
++pos; ++pos;
val.splice(pos, 0, el.columnName); 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.loadColumnsOrder();
this.updateTableHeaders(); this.updateTableHeaders();
this.tableBody.replaceChildren(); this.tableBody.replaceChildren();
@@ -393,7 +392,7 @@ window.qBittorrent.DynamicTable ??= (() => {
showColumn(columnName, show) { showColumn(columnName, show) {
this.columns[columnName].visible = show ? "1" : "0"; 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.updateColumn(columnName);
this.columns[columnName].onVisibilityChange?.(columnName); this.columns[columnName].onVisibilityChange?.(columnName);
} }
@@ -463,7 +462,7 @@ window.qBittorrent.DynamicTable ??= (() => {
} }
saveColumnWidth(columnName) { 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() { setupHeaderMenu() {
@@ -561,11 +560,11 @@ window.qBittorrent.DynamicTable ??= (() => {
const column = {}; const column = {};
column["name"] = name; column["name"] = name;
column["title"] = 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["force_hide"] = false;
column["caption"] = caption; column["caption"] = caption;
column["style"] = style; 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["dataProperties"] = [name];
column["getRowValue"] = function(row, pos) { column["getRowValue"] = function(row, pos) {
if (pos === undefined) if (pos === undefined)
@@ -600,7 +599,7 @@ window.qBittorrent.DynamicTable ??= (() => {
loadColumnsOrder() { loadColumnsOrder() {
const columnsOrder = []; const columnsOrder = [];
const val = LocalPreferences.get(`columns_order_${this.dynamicTableDivId}`); const val = localPreferences.get(`columns_order_${this.dynamicTableDivId}`);
if ((val === null) || (val === undefined)) if ((val === null) || (val === undefined))
return; return;
for (const v of val.split(",")) { for (const v of val.split(",")) {
@@ -624,7 +623,7 @@ window.qBittorrent.DynamicTable ??= (() => {
val += ","; val += ",";
val += this.columns[i].name; val += this.columns[i].name;
} }
LocalPreferences.set(`columns_order_${this.dynamicTableDivId}`, val); localPreferences.set(`columns_order_${this.dynamicTableDivId}`, val);
} }
updateTableHeaders() { updateTableHeaders() {
@@ -674,7 +673,7 @@ window.qBittorrent.DynamicTable ??= (() => {
} }
getSortedColumn() { 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.reverseSort = reverse ?? (this.reverseSort === "0" ? "1" : "0");
this.setSortedColumnIcon(column, null, (this.reverseSort === "1")); this.setSortedColumnIcon(column, null, (this.reverseSort === "1"));
} }
LocalPreferences.set(`sorted_column_${this.dynamicTableDivId}`, column); localPreferences.set(`sorted_column_${this.dynamicTableDivId}`, column);
LocalPreferences.set(`reverse_sort_${this.dynamicTableDivId}`, this.reverseSort); localPreferences.set(`reverse_sort_${this.dynamicTableDivId}`, this.reverseSort);
this.updateTable(false); this.updateTable(false);
} }
@@ -729,7 +728,7 @@ window.qBittorrent.DynamicTable ??= (() => {
} }
setupAltRow() { setupAltRow() {
const useAltRowColors = (LocalPreferences.get("use_alt_row_colors", "true") === "true"); const useAltRowColors = (localPreferences.get("use_alt_row_colors", "true") === "true");
if (useAltRowColors) if (useAltRowColors)
document.getElementById(this.dynamicTableDivId).classList.add("altRowColors"); document.getElementById(this.dynamicTableDivId).classList.add("altRowColors");
} }
@@ -1807,7 +1806,7 @@ window.qBittorrent.DynamicTable ??= (() => {
? "dblclick_download" ? "dblclick_download"
: "dblclick_complete"; : "dblclick_complete";
if (LocalPreferences.get(prefKey, "1") !== "1") if (localPreferences.get(prefKey, "1") !== "1")
return true; return true;
if (state.includes("stopped")) if (state.includes("stopped"))
@@ -2841,9 +2840,9 @@ window.qBittorrent.DynamicTable ??= (() => {
initColumns() { initColumns() {
// Blocks saving header width (because window width isn't saved) // Blocks saving header width (because window width isn't saved)
LocalPreferences.remove(`column_checked_width_${this.dynamicTableDivId}`); localPreferences.remove(`column_checked_width_${this.dynamicTableDivId}`);
LocalPreferences.remove(`column_original_width_${this.dynamicTableDivId}`); localPreferences.remove(`column_original_width_${this.dynamicTableDivId}`);
LocalPreferences.remove(`column_renamed_width_${this.dynamicTableDivId}`); localPreferences.remove(`column_renamed_width_${this.dynamicTableDivId}`);
this.newColumn("checked", "", "", 50, true); this.newColumn("checked", "", "", 50, true);
this.newColumn("original", "", "QBT_TR(Original)QBT_TR[CONTEXT=TrackerListWidget]", 270, 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); this.newColumn("renamed", "", "QBT_TR(Renamed)QBT_TR[CONTEXT=TrackerListWidget]", 220, true);

View File

@@ -108,8 +108,6 @@ window.qBittorrent.Dialog ??= (() => {
})(); })();
Object.freeze(window.qBittorrent.Dialog); Object.freeze(window.qBittorrent.Dialog);
const LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
let saveWindowSize = () => {}; let saveWindowSize = () => {};
let loadWindowWidth = () => {}; let loadWindowWidth = () => {};
let loadWindowHeight = () => {}; let loadWindowHeight = () => {};
@@ -159,23 +157,25 @@ let setQueuePositionFN = () => {};
let exportTorrentFN = () => {}; let exportTorrentFN = () => {};
const initializeWindows = () => { const initializeWindows = () => {
const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
saveWindowSize = (windowName, windowId = windowName) => { saveWindowSize = (windowName, windowId = windowName) => {
const windowInstance = MochaUI.Windows.instances[windowId]; const windowInstance = MochaUI.Windows.instances[windowId];
const size = windowInstance.contentWrapperEl.getSize(); const size = windowInstance.contentWrapperEl.getSize();
LocalPreferences.set(`window_${windowName}_width`, size.x); localPreferences.set(`window_${windowName}_width`, size.x);
LocalPreferences.set(`window_${windowName}_height`, size.y); localPreferences.set(`window_${windowName}_height`, size.y);
}; };
loadWindowWidth = (windowId, defaultValue, limitToViewportWidth = true) => { loadWindowWidth = (windowId, defaultValue, limitToViewportWidth = true) => {
if (limitToViewportWidth) if (limitToViewportWidth)
defaultValue = window.qBittorrent.Dialog.limitWidthToViewport(defaultValue); 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) => { loadWindowHeight = (windowId, defaultValue, limitToViewportHeight = true) => {
if (limitToViewportHeight) if (limitToViewportHeight)
defaultValue = window.qBittorrent.Dialog.limitHeightToViewport(defaultValue); defaultValue = window.qBittorrent.Dialog.limitHeightToViewport(defaultValue);
return LocalPreferences.get(`window_${windowId}_height`, defaultValue); return localPreferences.get(`window_${windowId}_height`, defaultValue);
}; };
const addClickEvent = (el, fn) => { const addClickEvent = (el, fn) => {

View File

@@ -46,6 +46,8 @@ window.qBittorrent.Search ??= (() => {
}; };
}; };
const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
const searchTabIdPrefix = "Search-"; const searchTabIdPrefix = "Search-";
let loadSearchPluginsTimer = -1; let loadSearchPluginsTimer = -1;
const searchPlugins = []; const searchPlugins = [];
@@ -108,7 +110,7 @@ window.qBittorrent.Search ??= (() => {
const init = () => { const init = () => {
// load "Search in" preference from local storage // 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({ const searchResultsTableContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({
targets: "#searchResultsTableDiv tbody tr", targets: "#searchResultsTableDiv tbody tr",
menu: "searchResultsTableMenu", menu: "searchResultsTableMenu",
@@ -160,7 +162,7 @@ window.qBittorrent.Search ??= (() => {
}); });
// restore search tabs // 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) for (const { id, pattern } of searchJobs)
createSearchTab(id, pattern); 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); const jobIndex = searchJobs.findIndex((job) => job.id === oldSearchId);
if (jobIndex >= 0) { if (jobIndex >= 0) {
searchJobs[jobIndex].id = searchId; 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 // 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); const jobIndex = searchJobs.findIndex((job) => job.id === searchId);
if (jobIndex >= 0) { if (jobIndex >= 0) {
searchJobs.splice(jobIndex, 1); searchJobs.splice(jobIndex, 1);
LocalPreferences.set("search_jobs", JSON.stringify(searchJobs)); localPreferences.set("search_jobs", JSON.stringify(searchJobs));
} }
if (numSearchTabs() === 0) { if (numSearchTabs() === 0) {
@@ -450,9 +452,9 @@ window.qBittorrent.Search ??= (() => {
const searchId = responseJSON.id; const searchId = responseJSON.id;
createSearchTab(searchId, pattern); 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 }); 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 = () => { const searchInTorrentName = () => {
LocalPreferences.set("search_in_filter", getSearchInTorrentName()); localPreferences.set("search_in_filter", getSearchInTorrentName());
searchFilterChanged(); searchFilterChanged();
}; };

View File

@@ -127,6 +127,8 @@
}; };
}; };
const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
const formatUrls = (urls) => { const formatUrls = (urls) => {
return urls.split("\n").map(encodeURIComponent).join("|"); return urls.split("\n").map(encodeURIComponent).join("|");
}; };
@@ -207,11 +209,11 @@
comments: document.getElementById("comments").value, comments: document.getElementById("comments").value,
source: document.getElementById("source").value, source: document.getElementById("source").value,
}; };
LocalPreferences.set("torrent_creator", JSON.stringify(preference)); localPreferences.set("torrent_creator", JSON.stringify(preference));
}; };
const loadPreference = () => { 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("sourcePath").value = preference.sourcePath ?? "";
document.getElementById("torrentFormat").value = preference.torrentFormat ?? "hybrid"; document.getElementById("torrentFormat").value = preference.torrentFormat ?? "hybrid";
document.getElementById("pieceSize").value = preference.pieceSize ?? 0; document.getElementById("pieceSize").value = preference.pieceSize ?? 0;

View File

@@ -82,9 +82,11 @@
}; };
}; };
const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
const toggleCategoryDisplay = (filterItemID) => { const toggleCategoryDisplay = (filterItemID) => {
const filterItem = document.getElementById(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({ 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"); toggleFilterDisplay("statusFilterList");
if (LocalPreferences.get("filter_category_collapsed") === "true") if (localPreferences.get("filter_category_collapsed") === "true")
toggleFilterDisplay("categoryFilterList"); toggleFilterDisplay("categoryFilterList");
if (LocalPreferences.get("filter_tag_collapsed") === "true") if (localPreferences.get("filter_tag_collapsed") === "true")
toggleFilterDisplay("tagFilterList"); toggleFilterDisplay("tagFilterList");
if (LocalPreferences.get("filter_tracker_collapsed") === "true") if (localPreferences.get("filter_tracker_collapsed") === "true")
toggleFilterDisplay("trackerFilterList"); toggleFilterDisplay("trackerFilterList");
document.getElementById("Filters_pad").addEventListener("click", (event) => { document.getElementById("Filters_pad").addEventListener("click", (event) => {
@@ -261,7 +263,7 @@
}); });
document.getElementById("Filters_pad").addEventListener("dblclick", (event) => { document.getElementById("Filters_pad").addEventListener("dblclick", (event) => {
if (LocalPreferences.get("dblclick_filter", "1") !== "1") if (localPreferences.get("dblclick_filter", "1") !== "1")
return; return;
const filterItem = event.target.closest("li"); const filterItem = event.target.closest("li");

View File

@@ -182,10 +182,12 @@
} }
}; };
const localPreferences = new window.qBittorrent.LocalPreferences.LocalPreferences();
let logFilterTimer = -1; let logFilterTimer = -1;
let inputtedFilterText = ""; let inputtedFilterText = "";
let selectBox; 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 = () => { const init = () => {
for (const option of document.getElementById("logLevelSelect").options) for (const option of document.getElementById("logLevelSelect").options)
@@ -275,7 +277,7 @@
if (selectedLogLevels !== value) { if (selectedLogLevels !== value) {
tableInfo[currentSelectedTab].last_id = -1; tableInfo[currentSelectedTab].last_id = -1;
selectedLogLevels = value; selectedLogLevels = value;
LocalPreferences.set("qbt_selected_log_levels", JSON.stringify(selectedLogLevels)); localPreferences.set("qbt_selected_log_levels", JSON.stringify(selectedLogLevels));
logFilterChanged(); logFilterChanged();
} }
}; };

View File

@@ -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 // Behavior tab
const numberInputLimiter = (input) => { const numberInputLimiter = (input) => {
const inputNumber = Number(input.value); const inputNumber = Number(input.value);
@@ -2217,7 +2219,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
const updateColoSchemeSelect = () => { const updateColoSchemeSelect = () => {
const combobox = document.getElementById("colorSchemeSelect"); const combobox = document.getElementById("colorSchemeSelect");
const colorScheme = LocalPreferences.get("color_scheme"); const colorScheme = localPreferences.get("color_scheme");
if (colorScheme === "light") if (colorScheme === "light")
combobox.options[1].selected = true; combobox.options[1].selected = true;
@@ -2236,14 +2238,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
updateColoSchemeSelect(); updateColoSchemeSelect();
document.getElementById("statusBarExternalIP").checked = pref.status_bar_external_ip; document.getElementById("statusBarExternalIP").checked = pref.status_bar_external_ip;
document.getElementById("performanceWarning").checked = pref.performance_warning; document.getElementById("performanceWarning").checked = pref.performance_warning;
document.getElementById("displayFullURLTrackerColumn").checked = (LocalPreferences.get("full_url_tracker_column", "false") === "true"); 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("useVirtualList").checked = (localPreferences.get("use_virtual_list", "false") === "true");
document.getElementById("hideZeroFiltersCheckbox").checked = (LocalPreferences.get("hide_zero_status_filters", "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("dblclickDownloadSelect").value = localPreferences.get("dblclick_download", "1");
document.getElementById("dblclickCompleteSelect").value = LocalPreferences.get("dblclick_complete", "1"); document.getElementById("dblclickCompleteSelect").value = localPreferences.get("dblclick_complete", "1");
document.getElementById("dblclickFiltersSelect").value = LocalPreferences.get("dblclick_filter", "1"); document.getElementById("dblclickFiltersSelect").value = localPreferences.get("dblclick_filter", "1");
document.getElementById("confirmTorrentDeletion").checked = pref.confirm_torrent_deletion; 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_checkbox").checked = pref.file_log_enabled;
document.getElementById("filelog_save_path_input").value = pref.file_log_path; document.getElementById("filelog_save_path_input").value = pref.file_log_path;
document.getElementById("filelog_backup_checkbox").checked = pref.file_log_backup_enabled; 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; settings["locale"] = document.getElementById("locale_select").value;
const colorScheme = Number(document.getElementById("colorSchemeSelect").value); const colorScheme = Number(document.getElementById("colorSchemeSelect").value);
if (colorScheme === 0) if (colorScheme === 0)
LocalPreferences.remove("color_scheme"); localPreferences.remove("color_scheme");
else if (colorScheme === 1) else if (colorScheme === 1)
LocalPreferences.set("color_scheme", "light"); localPreferences.set("color_scheme", "light");
else else
LocalPreferences.set("color_scheme", "dark"); localPreferences.set("color_scheme", "dark");
settings["status_bar_external_ip"] = document.getElementById("statusBarExternalIP").checked; settings["status_bar_external_ip"] = document.getElementById("statusBarExternalIP").checked;
settings["performance_warning"] = document.getElementById("performanceWarning").checked; settings["performance_warning"] = document.getElementById("performanceWarning").checked;
LocalPreferences.set("full_url_tracker_column", document.getElementById("displayFullURLTrackerColumn").checked.toString()); localPreferences.set("full_url_tracker_column", document.getElementById("displayFullURLTrackerColumn").checked.toString());
LocalPreferences.set("use_virtual_list", document.getElementById("useVirtualList").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("hide_zero_status_filters", document.getElementById("hideZeroFiltersCheckbox").checked.toString());
LocalPreferences.set("dblclick_download", document.getElementById("dblclickDownloadSelect").value); localPreferences.set("dblclick_download", document.getElementById("dblclickDownloadSelect").value);
LocalPreferences.set("dblclick_complete", document.getElementById("dblclickCompleteSelect").value); localPreferences.set("dblclick_complete", document.getElementById("dblclickCompleteSelect").value);
LocalPreferences.set("dblclick_filter", document.getElementById("dblclickFiltersSelect").value); localPreferences.set("dblclick_filter", document.getElementById("dblclickFiltersSelect").value);
settings["confirm_torrent_deletion"] = document.getElementById("confirmTorrentDeletion").checked; 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_enabled"] = document.getElementById("filelog_checkbox").checked;
settings["file_log_path"] = document.getElementById("filelog_save_path_input").value; settings["file_log_path"] = document.getElementById("filelog_save_path_input").value;
settings["file_log_backup_enabled"] = document.getElementById("filelog_backup_checkbox").checked; settings["file_log_backup_enabled"] = document.getElementById("filelog_backup_checkbox").checked;