From d06d5b923a247571c692f1e35c9623ba1b4d59cd Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sat, 10 Feb 2024 01:25:53 +0800 Subject: [PATCH] Cache program preferences So that qbt can just use the data from memory which is vastly faster than waiting for a response over the net. --- src/webui/www/.eslintrc.json | 2 +- src/webui/www/private/confirmdeletion.html | 25 +- src/webui/www/private/index.html | 3 +- src/webui/www/private/scripts/cache.js | 112 +++++ src/webui/www/private/scripts/client.js | 2 + src/webui/www/private/scripts/download.js | 71 ++- src/webui/www/private/views/preferences.html | 441 +++++++++--------- src/webui/www/private/views/rss.html | 33 +- .../www/private/views/rssDownloader.html | 52 +-- src/webui/www/webui.qrc | 1 + 10 files changed, 402 insertions(+), 340 deletions(-) create mode 100644 src/webui/www/private/scripts/cache.js diff --git a/src/webui/www/.eslintrc.json b/src/webui/www/.eslintrc.json index 315a4f82f..6ca9d01ce 100644 --- a/src/webui/www/.eslintrc.json +++ b/src/webui/www/.eslintrc.json @@ -1,7 +1,7 @@ { "env": { "browser": true, - "es2021": true + "es2022": true }, "extends": "eslint:recommended", "plugins": [ diff --git a/src/webui/www/private/confirmdeletion.html b/src/webui/www/private/confirmdeletion.html index 9c5038624..9c49f2e2d 100644 --- a/src/webui/www/private/confirmdeletion.html +++ b/src/webui/www/private/confirmdeletion.html @@ -37,38 +37,25 @@ const isDeletingFiles = (new URI().getData('deleteFiles') === "true"); $('deleteFromDiskCB').checked = isDeletingFiles; - let prefDeleteContentFiles = false; - new Request.JSON({ - url: 'api/v2/app/preferences', - method: 'get', - noCache: true, - onSuccess: function(pref) { - if (!pref) - return; + const prefCache = window.parent.qBittorrent.Cache.preferences.get(); + let prefDeleteContentFiles = prefCache.delete_torrent_content_files; - prefDeleteContentFiles = pref.delete_torrent_content_files; - $('deleteFromDiskCB').checked ||= prefDeleteContentFiles; - } - }).send(); + $('deleteFromDiskCB').checked ||= prefDeleteContentFiles; $('deleteFromDiskCB').addEvent('click', function(e) { setRememberBtnEnabled($('deleteFromDiskCB').checked !== prefDeleteContentFiles); }); // Set current "Delete files" choice as the default $('rememberBtn').addEvent('click', function(e) { - new Request({ - url: 'api/v2/app/setPreferences', - method: 'post', + window.parent.qBittorrent.Cache.preferences.set({ data: { - 'json': JSON.encode({ - 'delete_torrent_content_files': $('deleteFromDiskCB').checked - }) + 'delete_torrent_content_files': $('deleteFromDiskCB').checked }, onSuccess: function() { prefDeleteContentFiles = $('deleteFromDiskCB').checked; setRememberBtnEnabled(false); } - }).send(); + }); }); const hashes = new URI().getData('hashes').split('|'); diff --git a/src/webui/www/private/index.html b/src/webui/www/private/index.html index bc50a7c68..1b5d2a3e7 100644 --- a/src/webui/www/private/index.html +++ b/src/webui/www/private/index.html @@ -21,7 +21,8 @@ - + + diff --git a/src/webui/www/private/scripts/cache.js b/src/webui/www/private/scripts/cache.js new file mode 100644 index 000000000..bf5a35609 --- /dev/null +++ b/src/webui/www/private/scripts/cache.js @@ -0,0 +1,112 @@ +/* + * Bittorrent Client using Qt and libtorrent. + * Copyright (C) 2024 Mike Tzou (Chocobo1) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give permission to + * link this program with the OpenSSL project's "OpenSSL" library (or with + * modified versions of it that use the same license as the "OpenSSL" library), + * and distribute the linked executables. You must obey the GNU General Public + * License in all respects for all of the code used other than "OpenSSL". If you + * modify file(s), you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + */ + +'use strict'; + +if (window.qBittorrent === undefined) + window.qBittorrent = {}; + +window.qBittorrent.Cache = (() => { + const exports = () => { + return { + preferences: new PreferencesCache() + }; + }; + + class PreferencesCache { + #m_store = {}; + + // obj: { + // onFailure: () => {}, + // onSuccess: () => {} + // } + init(obj = {}) { + new Request.JSON({ + url: 'api/v2/app/preferences', + method: 'get', + noCache: true, + onFailure: (xhr) => { + if (typeof obj.onFailure === 'function') + obj.onFailure(xhr); + }, + onSuccess: (responseJSON, responseText) => { + if (!responseJSON) + return; + this.#m_store = structuredClone(responseJSON); + + if (typeof obj.onSuccess === 'function') + obj.onSuccess(responseJSON, responseText); + } + }).send(); + } + + get() { + return structuredClone(this.#m_store); + } + + // obj: { + // data: {}, + // onFailure: () => {}, + // onSuccess: () => {} + // } + set(obj) { + if (typeof obj !== 'object') + throw new Error('`obj` is not an object.'); + if (typeof obj.data !== 'object') + throw new Error('`data` is not an object.'); + + new Request({ + url: 'api/v2/app/setPreferences', + method: 'post', + data: { + 'json': JSON.stringify(obj.data) + }, + onFailure: (xhr) => { + if (typeof obj.onFailure === 'function') + obj.onFailure(xhr); + }, + onSuccess: (responseText, responseXML) => { + for (const key in obj.data) { + if (!Object.hasOwn(obj.data, key)) + continue; + + const value = obj.data[key]; + this.#m_store[key] = value; + } + + if (typeof obj.onSuccess === 'function') + obj.onSuccess(responseText, responseXML); + } + }).send(); + } + } + + return exports(); +})(); + +Object.freeze(window.qBittorrent.Cache); diff --git a/src/webui/www/private/scripts/client.js b/src/webui/www/private/scripts/client.js index b02f655f1..9aeec493b 100644 --- a/src/webui/www/private/scripts/client.js +++ b/src/webui/www/private/scripts/client.js @@ -1576,6 +1576,8 @@ window.addEvent('load', function() { } }).activate(); + window.parent.qBittorrent.Cache.preferences.init(); + // fetch qbt version and store it locally new Request({ url: 'api/v2/app/version', diff --git a/src/webui/www/private/scripts/download.js b/src/webui/www/private/scripts/download.js index cbfc52c7d..7e82e493c 100644 --- a/src/webui/www/private/scripts/download.js +++ b/src/webui/www/private/scripts/download.js @@ -59,51 +59,40 @@ window.qBittorrent.Download = (function() { }; const getPreferences = function() { - new Request.JSON({ - url: 'api/v2/app/preferences', - method: 'get', - noCache: true, - onFailure: function() { - alert("Could not contact qBittorrent"); - }, - onSuccess: function(pref) { - if (!pref) - return; + const pref = window.parent.qBittorrent.Cache.preferences.get(); - defaultSavePath = pref.save_path; - $('savepath').setProperty('value', defaultSavePath); - $('startTorrent').checked = !pref.start_paused_enabled; - $('addToTopOfQueue').checked = pref.add_to_top_of_queue; + defaultSavePath = pref.save_path; + $('savepath').setProperty('value', defaultSavePath); + $('startTorrent').checked = !pref.start_paused_enabled; + $('addToTopOfQueue').checked = pref.add_to_top_of_queue; - if (pref.auto_tmm_enabled == 1) { - $('autoTMM').selectedIndex = 1; - $('savepath').disabled = true; - } - else { - $('autoTMM').selectedIndex = 0; - } + if (pref.auto_tmm_enabled == 1) { + $('autoTMM').selectedIndex = 1; + $('savepath').disabled = true; + } + else { + $('autoTMM').selectedIndex = 0; + } - if (pref.torrent_stop_condition === "MetadataReceived") { - $('stopCondition').selectedIndex = 1; - } - else if (pref.torrent_stop_condition === "FilesChecked") { - $('stopCondition').selectedIndex = 2; - } - else { - $('stopCondition').selectedIndex = 0; - } + if (pref.torrent_stop_condition === "MetadataReceived") { + $('stopCondition').selectedIndex = 1; + } + else if (pref.torrent_stop_condition === "FilesChecked") { + $('stopCondition').selectedIndex = 2; + } + else { + $('stopCondition').selectedIndex = 0; + } - if (pref.torrent_content_layout === "Subfolder") { - $('contentLayout').selectedIndex = 1; - } - else if (pref.torrent_content_layout === "NoSubfolder") { - $('contentLayout').selectedIndex = 2; - } - else { - $('contentLayout').selectedIndex = 0; - } - } - }).send(); + if (pref.torrent_content_layout === "Subfolder") { + $('contentLayout').selectedIndex = 1; + } + else if (pref.torrent_content_layout === "NoSubfolder") { + $('contentLayout').selectedIndex = 2; + } + else { + $('contentLayout').selectedIndex = 0; + } }; const changeCategorySelect = function(item) { diff --git a/src/webui/www/private/views/preferences.html b/src/webui/www/private/views/preferences.html index 6d66b49fc..3ff1d1072 100644 --- a/src/webui/www/private/views/preferences.html +++ b/src/webui/www/private/views/preferences.html @@ -1985,17 +1985,8 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD }; const loadPreferences = function() { - new Request.JSON({ - url: 'api/v2/app/preferences', - method: 'get', - noCache: true, - onFailure: function() { - alert("Could not contact qBittorrent"); - }, - onSuccess: function(pref) { - if (!pref) - return; - + window.parent.qBittorrent.Cache.preferences.init({ + onSuccess: (pref) => { // Behavior tab $('filelog_checkbox').setProperty('checked', pref.file_log_enabled); $('filelog_save_path_input').setProperty('value', pref.file_log_path); @@ -2395,75 +2386,75 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD $('i2pInboundLength').setProperty('value', pref.i2p_inbound_length); $('i2pOutboundLength').setProperty('value', pref.i2p_outbound_length); } - }).send(); + }); }; const applyPreferences = function() { - const settings = new Hash(); + const settings = {}; // Validate form data // Behavior tab - settings.set('file_log_enabled', $('filelog_checkbox').getProperty('checked')); - settings.set('file_log_path', $('filelog_save_path_input').getProperty('value')); - settings.set('file_log_backup_enabled', $('filelog_backup_checkbox').getProperty('checked')); - settings.set('file_log_max_size', Number($('filelog_max_size_input').getProperty('value'))); - settings.set('file_log_delete_old', $('filelog_delete_old_checkbox').getProperty('checked')); - settings.set('file_log_age', Number($('filelog_age_input').getProperty('value'))); - settings.set('file_log_age_type', Number($('filelog_age_type_select').getProperty('value'))); + settings['file_log_enabled'] = $('filelog_checkbox').getProperty('checked'); + settings['file_log_path'] = $('filelog_save_path_input').getProperty('value'); + settings['file_log_backup_enabled'] = $('filelog_backup_checkbox').getProperty('checked'); + settings['file_log_max_size'] = Number($('filelog_max_size_input').getProperty('value')); + settings['file_log_delete_old'] = $('filelog_delete_old_checkbox').getProperty('checked'); + settings['file_log_age'] = Number($('filelog_age_input').getProperty('value')); + settings['file_log_age_type'] = Number($('filelog_age_type_select').getProperty('value')); // Downloads tab // When adding a torrent - settings.set('torrent_content_layout', $('contentlayout_select').getSelected()[0].getProperty('value')); - settings.set('add_to_top_of_queue', $('addToTopOfQueueCheckbox').getProperty('checked')); - settings.set('start_paused_enabled', $('dontstartdownloads_checkbox').getProperty('checked')); - settings.set('torrent_stop_condition', $('stopConditionSelect').getSelected()[0].getProperty('value')); - settings.set('auto_delete_mode', Number($('deletetorrentfileafter_checkbox').getProperty('checked'))); + settings['torrent_content_layout'] = $('contentlayout_select').getSelected()[0].getProperty('value'); + settings['add_to_top_of_queue'] = $('addToTopOfQueueCheckbox').getProperty('checked'); + settings['start_paused_enabled'] = $('dontstartdownloads_checkbox').getProperty('checked'); + settings['torrent_stop_condition'] = $('stopConditionSelect').getSelected()[0].getProperty('value'); + settings['auto_delete_mode'] = Number($('deletetorrentfileafter_checkbox').getProperty('checked')); - settings.set('preallocate_all', $('preallocateall_checkbox').getProperty('checked')); - settings.set('incomplete_files_ext', $('appendext_checkbox').getProperty('checked')); - settings.set('use_unwanted_folder', $('unwantedfolder_checkbox').getProperty('checked')); + settings['preallocate_all'] = $('preallocateall_checkbox').getProperty('checked'); + settings['incomplete_files_ext'] = $('appendext_checkbox').getProperty('checked'); + settings['use_unwanted_folder'] = $('unwantedfolder_checkbox').getProperty('checked'); // Saving Management - settings.set('auto_tmm_enabled', ($('default_tmm_combobox').getProperty('value') === 'true')); - settings.set('torrent_changed_tmm_enabled', ($('torrent_changed_tmm_combobox').getProperty('value') === 'true')); - settings.set('save_path_changed_tmm_enabled', ($('save_path_changed_tmm_combobox').getProperty('value') === 'true')); - settings.set('category_changed_tmm_enabled', ($('category_changed_tmm_combobox').getProperty('value') === 'true')); - settings.set('use_subcategories', $('use_subcategories_checkbox').getProperty('checked')); - settings.set('save_path', $('savepath_text').getProperty('value')); - settings.set('temp_path_enabled', $('temppath_checkbox').getProperty('checked')); - settings.set('temp_path', $('temppath_text').getProperty('value')); + settings['auto_tmm_enabled'] = ($('default_tmm_combobox').getProperty('value') === 'true'); + settings['torrent_changed_tmm_enabled'] = ($('torrent_changed_tmm_combobox').getProperty('value') === 'true'); + settings['save_path_changed_tmm_enabled'] = ($('save_path_changed_tmm_combobox').getProperty('value') === 'true'); + settings['category_changed_tmm_enabled'] = ($('category_changed_tmm_combobox').getProperty('value') === 'true'); + settings['use_subcategories'] = $('use_subcategories_checkbox').getProperty('checked'); + settings['save_path'] = $('savepath_text').getProperty('value'); + settings['temp_path_enabled'] = $('temppath_checkbox').getProperty('checked'); + settings['temp_path'] = $('temppath_text').getProperty('value'); if ($('exportdir_checkbox').getProperty('checked')) - settings.set('export_dir', $('exportdir_text').getProperty('value')); + settings['export_dir'] = $('exportdir_text').getProperty('value'); else - settings.set('export_dir', ''); + settings['export_dir'] = ''; if ($('exportdirfin_checkbox').getProperty('checked')) - settings.set('export_dir_fin', $('exportdirfin_text').getProperty('value')); + settings['export_dir_fin'] = $('exportdirfin_text').getProperty('value'); else - settings.set('export_dir_fin', ''); + settings['export_dir_fin'] = ''; // Automatically add torrents from - settings.set('scan_dirs', getWatchedFolders()); + settings['scan_dirs'] = getWatchedFolders(); // Excluded file names - settings.set('excluded_file_names_enabled', $('excludedFileNamesCheckbox').getProperty('checked')); - settings.set('excluded_file_names', $('excludedFileNamesTextarea').getProperty('value')); + settings['excluded_file_names_enabled'] = $('excludedFileNamesCheckbox').getProperty('checked'); + settings['excluded_file_names'] = $('excludedFileNamesTextarea').getProperty('value'); // Email notification upon download completion - settings.set('mail_notification_enabled', $('mail_notification_checkbox').getProperty('checked')); - settings.set('mail_notification_sender', $('src_email_txt').getProperty('value')); - settings.set('mail_notification_email', $('dest_email_txt').getProperty('value')); - settings.set('mail_notification_smtp', $('smtp_server_txt').getProperty('value')); - settings.set('mail_notification_ssl_enabled', $('mail_ssl_checkbox').getProperty('checked')); - settings.set('mail_notification_auth_enabled', $('mail_auth_checkbox').getProperty('checked')); - settings.set('mail_notification_username', $('mail_username_text').getProperty('value')); - settings.set('mail_notification_password', $('mail_password_text').getProperty('value')); + settings['mail_notification_enabled'] = $('mail_notification_checkbox').getProperty('checked'); + settings['mail_notification_sender'] = $('src_email_txt').getProperty('value'); + settings['mail_notification_email'] = $('dest_email_txt').getProperty('value'); + settings['mail_notification_smtp'] = $('smtp_server_txt').getProperty('value'); + settings['mail_notification_ssl_enabled'] = $('mail_ssl_checkbox').getProperty('checked'); + settings['mail_notification_auth_enabled'] = $('mail_auth_checkbox').getProperty('checked'); + settings['mail_notification_username'] = $('mail_username_text').getProperty('value'); + settings['mail_notification_password'] = $('mail_password_text').getProperty('value'); // Run an external program on torrent added - settings.set('autorun_on_torrent_added_enabled', $('autorunOnTorrentAddedCheckbox').getProperty('checked')); - settings.set('autorun_on_torrent_added_program', $('autorunOnTorrentAddedProgram').getProperty('value')); + settings['autorun_on_torrent_added_enabled'] = $('autorunOnTorrentAddedCheckbox').getProperty('checked'); + settings['autorun_on_torrent_added_program'] = $('autorunOnTorrentAddedProgram').getProperty('value'); // Run an external program on torrent finished - settings.set('autorun_enabled', $('autorun_checkbox').getProperty('checked')); - settings.set('autorun_program', $('autorunProg_txt').getProperty('value')); + settings['autorun_enabled'] = $('autorun_checkbox').getProperty('checked'); + settings['autorun_program'] = $('autorunProg_txt').getProperty('value'); // Connection tab // Listening Port @@ -2472,8 +2463,8 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD alert("QBT_TR(The port used for incoming connections must be between 0 and 65535.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('listen_port', listen_port); - settings.set('upnp', $('upnp_checkbox').getProperty('checked')); + settings['listen_port'] = listen_port; + settings['upnp'] = $('upnp_checkbox').getProperty('checked'); // Connections Limits let max_connec = -1; @@ -2484,7 +2475,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } } - settings.set('max_connec', max_connec); + settings['max_connec'] = max_connec; let max_connec_per_torrent = -1; if ($('max_connec_per_torrent_checkbox').getProperty('checked')) { max_connec_per_torrent = $('max_connec_per_torrent_value').getProperty('value').toInt(); @@ -2493,7 +2484,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } } - settings.set('max_connec_per_torrent', max_connec_per_torrent); + settings['max_connec_per_torrent'] = max_connec_per_torrent; let max_uploads = -1; if ($('max_uploads_checkbox').getProperty('checked')) { max_uploads = $('max_uploads_value').getProperty('value').toInt(); @@ -2502,7 +2493,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } } - settings.set('max_uploads', max_uploads); + settings['max_uploads'] = max_uploads; let max_uploads_per_torrent = -1; if ($('max_uploads_per_torrent_checkbox').getProperty('checked')) { max_uploads_per_torrent = $('max_uploads_per_torrent_value').getProperty('value').toInt(); @@ -2511,32 +2502,32 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } } - settings.set('max_uploads_per_torrent', max_uploads_per_torrent); + settings['max_uploads_per_torrent'] = max_uploads_per_torrent; // I2P - settings.set('i2p_enabled', $('i2pEnabledCheckbox').getProperty('checked')); - settings.set('i2p_address', $('i2pAddress').getProperty('value')); - settings.set('i2p_port', $('i2pPort').getProperty('value').toInt()); - settings.set('i2p_mixed_mode', $('i2pMixedMode').getProperty('checked')); + settings['i2p_enabled'] = $('i2pEnabledCheckbox').getProperty('checked'); + settings['i2p_address'] = $('i2pAddress').getProperty('value'); + settings['i2p_port'] = $('i2pPort').getProperty('value').toInt(); + settings['i2p_mixed_mode'] = $('i2pMixedMode').getProperty('checked'); // Proxy Server - settings.set('proxy_type', $('peer_proxy_type_select').getProperty('value')); - settings.set('proxy_ip', $('peer_proxy_host_text').getProperty('value')); - settings.set('proxy_port', $('peer_proxy_port_value').getProperty('value').toInt()); - settings.set('proxy_auth_enabled', $('peer_proxy_auth_checkbox').getProperty('checked')); - settings.set('proxy_username', $('peer_proxy_username_text').getProperty('value')); - settings.set('proxy_password', $('peer_proxy_password_text').getProperty('value')); - settings.set('proxy_hostname_lookup', $('proxyHostnameLookupCheckbox').getProperty('checked')); - settings.set('proxy_bittorrent', $('proxy_bittorrent_checkbox').getProperty('checked')); - settings.set('proxy_peer_connections', $('use_peer_proxy_checkbox').getProperty('checked')); - settings.set('proxy_rss', $('proxy_rss_checkbox').getProperty('checked')); - settings.set('proxy_misc', $('proxy_misc_checkbox').getProperty('checked')); + settings['proxy_type'] = $('peer_proxy_type_select').getProperty('value'); + settings['proxy_ip'] = $('peer_proxy_host_text').getProperty('value'); + settings['proxy_port'] = $('peer_proxy_port_value').getProperty('value').toInt(); + settings['proxy_auth_enabled'] = $('peer_proxy_auth_checkbox').getProperty('checked'); + settings['proxy_username'] = $('peer_proxy_username_text').getProperty('value'); + settings['proxy_password'] = $('peer_proxy_password_text').getProperty('value'); + settings['proxy_hostname_lookup'] = $('proxyHostnameLookupCheckbox').getProperty('checked'); + settings['proxy_bittorrent'] = $('proxy_bittorrent_checkbox').getProperty('checked'); + settings['proxy_peer_connections'] = $('use_peer_proxy_checkbox').getProperty('checked'); + settings['proxy_rss'] = $('proxy_rss_checkbox').getProperty('checked'); + settings['proxy_misc'] = $('proxy_misc_checkbox').getProperty('checked'); // IP Filtering - settings.set('ip_filter_enabled', $('ipfilter_text_checkbox').getProperty('checked')); - settings.set('ip_filter_path', $('ipfilter_text').getProperty('value')); - settings.set('ip_filter_trackers', $('ipfilter_trackers_checkbox').getProperty('checked')); - settings.set('banned_IPs', $('banned_IPs_textarea').getProperty('value')); + settings['ip_filter_enabled'] = $('ipfilter_text_checkbox').getProperty('checked'); + settings['ip_filter_path'] = $('ipfilter_text').getProperty('value'); + settings['ip_filter_trackers'] = $('ipfilter_trackers_checkbox').getProperty('checked'); + settings['banned_IPs'] = $('banned_IPs_textarea').getProperty('value'); // Speed tab // Global Rate Limits @@ -2545,14 +2536,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD alert("QBT_TR(Global upload rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('up_limit', up_limit); + settings['up_limit'] = up_limit; const dl_limit = $('dl_limit_value').getProperty('value').toInt() * 1024; if (isNaN(dl_limit) || dl_limit < 0) { alert("QBT_TR(Global download rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('dl_limit', dl_limit); + settings['dl_limit'] = dl_limit; // Alternative Global Rate Limits const alt_up_limit = $('alt_up_limit_value').getProperty('value').toInt() * 1024; @@ -2560,81 +2551,81 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD alert("QBT_TR(Alternative upload rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('alt_up_limit', alt_up_limit); + settings['alt_up_limit'] = alt_up_limit; const alt_dl_limit = $('alt_dl_limit_value').getProperty('value').toInt() * 1024; if (isNaN(alt_dl_limit) || alt_dl_limit < 0) { alert("QBT_TR(Alternative download rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('alt_dl_limit', alt_dl_limit); + settings['alt_dl_limit'] = alt_dl_limit; - settings.set('bittorrent_protocol', Number($('enable_protocol_combobox').getProperty('value'))); - settings.set('limit_utp_rate', $('limit_utp_rate_checkbox').getProperty('checked')); - settings.set('limit_tcp_overhead', $('limit_tcp_overhead_checkbox').getProperty('checked')); - settings.set('limit_lan_peers', $('limit_lan_peers_checkbox').getProperty('checked')); + settings['bittorrent_protocol'] = Number($('enable_protocol_combobox').getProperty('value')); + settings['limit_utp_rate'] = $('limit_utp_rate_checkbox').getProperty('checked'); + settings['limit_tcp_overhead'] = $('limit_tcp_overhead_checkbox').getProperty('checked'); + settings['limit_lan_peers'] = $('limit_lan_peers_checkbox').getProperty('checked'); // Scheduler const scheduling_enabled = $('limitSchedulingCheckbox').getProperty('checked'); - settings.set('scheduler_enabled', scheduling_enabled); + settings['scheduler_enabled'] = scheduling_enabled; if (scheduling_enabled) { - settings.set('schedule_from_hour', $('schedule_from_hour').getProperty('value').toInt()); - settings.set('schedule_from_min', $('schedule_from_min').getProperty('value').toInt()); - settings.set('schedule_to_hour', $('schedule_to_hour').getProperty('value').toInt()); - settings.set('schedule_to_min', $('schedule_to_min').getProperty('value').toInt()); - settings.set('scheduler_days', $('schedule_freq_select').getProperty('value').toInt()); + settings['schedule_from_hour'] = $('schedule_from_hour').getProperty('value').toInt(); + settings['schedule_from_min'] = $('schedule_from_min').getProperty('value').toInt(); + settings['schedule_to_hour'] = $('schedule_to_hour').getProperty('value').toInt(); + settings['schedule_to_min'] = $('schedule_to_min').getProperty('value').toInt(); + settings['scheduler_days'] = $('schedule_freq_select').getProperty('value').toInt(); } // Bittorrent tab // Privacy - settings.set('dht', $('dht_checkbox').getProperty('checked')); - settings.set('pex', $('pex_checkbox').getProperty('checked')); - settings.set('lsd', $('lsd_checkbox').getProperty('checked')); - settings.set('encryption', Number($('encryption_select').getSelected()[0].getProperty('value'))); - settings.set('anonymous_mode', $('anonymous_mode_checkbox').getProperty('checked')); + settings['dht'] = $('dht_checkbox').getProperty('checked'); + settings['pex'] = $('pex_checkbox').getProperty('checked'); + settings['lsd'] = $('lsd_checkbox').getProperty('checked'); + settings['encryption'] = Number($('encryption_select').getSelected()[0].getProperty('value')); + settings['anonymous_mode'] = $('anonymous_mode_checkbox').getProperty('checked'); - settings.set('max_active_checking_torrents', Number($('maxActiveCheckingTorrents').getProperty('value'))); + settings['max_active_checking_torrents'] = Number($('maxActiveCheckingTorrents').getProperty('value')); // Torrent Queueing - settings.set('queueing_enabled', $('queueing_checkbox').getProperty('checked')); + settings['queueing_enabled'] = $('queueing_checkbox').getProperty('checked'); if ($('queueing_checkbox').getProperty('checked')) { const max_active_downloads = $('max_active_dl_value').getProperty('value').toInt(); if (isNaN(max_active_downloads) || max_active_downloads < -1) { alert("QBT_TR(Maximum active downloads must be greater than -1.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('max_active_downloads', max_active_downloads); + settings['max_active_downloads'] = max_active_downloads; const max_active_uploads = $('max_active_up_value').getProperty('value').toInt(); if (isNaN(max_active_uploads) || max_active_uploads < -1) { alert("QBT_TR(Maximum active uploads must be greater than -1.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('max_active_uploads', max_active_uploads); + settings['max_active_uploads'] = max_active_uploads; const max_active_torrents = $('max_active_to_value').getProperty('value').toInt(); if (isNaN(max_active_torrents) || max_active_torrents < -1) { alert("QBT_TR(Maximum active torrents must be greater than -1.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('max_active_torrents', max_active_torrents); - settings.set('dont_count_slow_torrents', $('dont_count_slow_torrents_checkbox').getProperty('checked')); + settings['max_active_torrents'] = max_active_torrents; + settings['dont_count_slow_torrents'] = $('dont_count_slow_torrents_checkbox').getProperty('checked'); const dl_rate_threshold = $('dl_rate_threshold').getProperty('value').toInt(); if (isNaN(dl_rate_threshold) || (dl_rate_threshold < 1)) { alert("QBT_TR(Download rate threshold must be greater than 0.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('slow_torrent_dl_rate_threshold', dl_rate_threshold); + settings['slow_torrent_dl_rate_threshold'] = dl_rate_threshold; const ul_rate_threshold = $('ul_rate_threshold').getProperty('value').toInt(); if (isNaN(ul_rate_threshold) || (ul_rate_threshold < 1)) { alert("QBT_TR(Upload rate threshold must be greater than 0.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('slow_torrent_ul_rate_threshold', ul_rate_threshold); + settings['slow_torrent_ul_rate_threshold'] = ul_rate_threshold; const torrent_inactive_timer = $('torrent_inactive_timer').getProperty('value').toInt(); if (isNaN(torrent_inactive_timer) || (torrent_inactive_timer < 1)) { alert("QBT_TR(Torrent inactivity timer must be greater than 0.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('slow_torrent_inactive_timer', torrent_inactive_timer); + settings['slow_torrent_inactive_timer'] = torrent_inactive_timer; } // Share Ratio Limiting @@ -2646,8 +2637,8 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } } - settings.set('max_ratio_enabled', $('max_ratio_checkbox').getProperty('checked')); - settings.set('max_ratio', max_ratio); + settings['max_ratio_enabled'] = $('max_ratio_checkbox').getProperty('checked'); + settings['max_ratio'] = max_ratio; let max_seeding_time = -1; if ($('max_seeding_time_checkbox').getProperty('checked')) { @@ -2657,9 +2648,9 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } } - settings.set('max_seeding_time_enabled', $('max_seeding_time_checkbox').getProperty('checked')); - settings.set('max_seeding_time', max_seeding_time); - settings.set('max_ratio_act', $('max_ratio_act').getProperty('value').toInt()); + settings['max_seeding_time_enabled'] = $('max_seeding_time_checkbox').getProperty('checked'); + settings['max_seeding_time'] = max_seeding_time; + settings['max_ratio_act'] = $('max_ratio_act').getProperty('value').toInt(); let max_inactive_seeding_time = -1; if ($('max_inactive_seeding_time_checkbox').getProperty('checked')) { @@ -2669,52 +2660,52 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } } - settings.set('max_inactive_seeding_time_enabled', $('max_inactive_seeding_time_checkbox').getProperty('checked')); - settings.set('max_inactive_seeding_time', max_inactive_seeding_time); - settings.set('max_ratio_act', $('max_ratio_act').getProperty('value').toInt()); + settings['max_inactive_seeding_time_enabled'] = $('max_inactive_seeding_time_checkbox').getProperty('checked'); + settings['max_inactive_seeding_time'] = max_inactive_seeding_time; + settings['max_ratio_act'] = $('max_ratio_act').getProperty('value').toInt(); // Add trackers - settings.set('add_trackers_enabled', $('add_trackers_checkbox').getProperty('checked')); - settings.set('add_trackers', $('add_trackers_textarea').getProperty('value')); + settings['add_trackers_enabled'] = $('add_trackers_checkbox').getProperty('checked'); + settings['add_trackers'] = $('add_trackers_textarea').getProperty('value'); // RSS Tab - settings.set('rss_processing_enabled', $('enable_fetching_rss_feeds_checkbox').getProperty('checked')); - settings.set('rss_refresh_interval', Number($('feed_refresh_interval').getProperty('value'))); - settings.set('rss_fetch_delay', Number($('feedFetchDelay').getProperty('value'))); - settings.set('rss_max_articles_per_feed', Number($('maximum_article_number').getProperty('value'))); - settings.set('rss_auto_downloading_enabled', $('enable_auto_downloading_rss_torrents_checkbox').getProperty('checked')); - settings.set('rss_download_repack_proper_episodes', $('downlock_repack_proper_episodes').getProperty('checked')); - settings.set('rss_smart_episode_filters', $('rss_filter_textarea').getProperty('value')); + settings['rss_processing_enabled'] = $('enable_fetching_rss_feeds_checkbox').getProperty('checked'); + settings['rss_refresh_interval'] = Number($('feed_refresh_interval').getProperty('value')); + settings['rss_fetch_delay'] = Number($('feedFetchDelay').getProperty('value')); + settings['rss_max_articles_per_feed'] = Number($('maximum_article_number').getProperty('value')); + settings['rss_auto_downloading_enabled'] = $('enable_auto_downloading_rss_torrents_checkbox').getProperty('checked'); + settings['rss_download_repack_proper_episodes'] = $('downlock_repack_proper_episodes').getProperty('checked'); + settings['rss_smart_episode_filters'] = $('rss_filter_textarea').getProperty('value'); // Web UI tab // Language - settings.set('locale', $('locale_select').getProperty('value')); - settings.set('performance_warning', $('performanceWarning').getProperty('checked')); + settings['locale'] = $('locale_select').getProperty('value'); + settings['performance_warning'] = $('performanceWarning').getProperty('checked'); // HTTP Server - settings.set('web_ui_domain_list', $('webui_domain_textarea').getProperty('value')); + settings['web_ui_domain_list'] = $('webui_domain_textarea').getProperty('value'); const web_ui_address = $('webui_address_value').getProperty('value').toString(); const web_ui_port = $('webui_port_value').getProperty('value').toInt(); if (isNaN(web_ui_port) || web_ui_port < 1 || web_ui_port > 65535) { alert("QBT_TR(The port used for the Web UI must be between 1 and 65535.)QBT_TR[CONTEXT=HttpServer]"); return; } - settings.set('web_ui_address', web_ui_address); - settings.set('web_ui_port', web_ui_port); - settings.set('web_ui_upnp', $('webui_upnp_checkbox').getProperty('checked')); + settings['web_ui_address'] = web_ui_address; + settings['web_ui_port'] = web_ui_port; + settings['web_ui_upnp'] = $('webui_upnp_checkbox').getProperty('checked'); const useHTTPS = $('use_https_checkbox').getProperty('checked'); - settings.set('use_https', useHTTPS); + settings['use_https'] = useHTTPS; const httpsCertificate = $('ssl_cert_text').getProperty('value'); - settings.set('web_ui_https_cert_path', httpsCertificate); + settings['web_ui_https_cert_path'] = httpsCertificate; if (useHTTPS && (httpsCertificate.length === 0)) { alert("QBT_TR(HTTPS certificate should not be empty)QBT_TR[CONTEXT=OptionsDialog]"); return; } const httpsKey = $('ssl_key_text').getProperty('value'); - settings.set('web_ui_https_key_path', httpsKey); + settings['web_ui_https_key_path'] = httpsKey; if (useHTTPS && (httpsKey.length === 0)) { alert("QBT_TR(HTTPS key should not be empty)QBT_TR[CONTEXT=OptionsDialog]"); return; @@ -2732,15 +2723,15 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD return; } - settings.set('web_ui_username', web_ui_username); + settings['web_ui_username'] = web_ui_username; if (web_ui_password.length > 0) - settings.set('web_ui_password', web_ui_password); - settings.set('bypass_local_auth', $('bypass_local_auth_checkbox').getProperty('checked')); - settings.set('bypass_auth_subnet_whitelist_enabled', $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked')); - settings.set('bypass_auth_subnet_whitelist', $('bypass_auth_subnet_whitelist_textarea').getProperty('value')); - settings.set('web_ui_max_auth_fail_count', Number($('webUIMaxAuthFailCountInput').getProperty('value'))); - settings.set('web_ui_ban_duration', Number($('webUIBanDurationInput').getProperty('value'))); - settings.set('web_ui_session_timeout', Number($('webUISessionTimeoutInput').getProperty('value'))); + settings['web_ui_password'] = web_ui_password; + settings['bypass_local_auth'] = $('bypass_local_auth_checkbox').getProperty('checked'); + settings['bypass_auth_subnet_whitelist_enabled'] = $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked'); + settings['bypass_auth_subnet_whitelist'] = $('bypass_auth_subnet_whitelist_textarea').getProperty('value'); + settings['web_ui_max_auth_fail_count'] = Number($('webUIMaxAuthFailCountInput').getProperty('value')); + settings['web_ui_ban_duration'] = Number($('webUIBanDurationInput').getProperty('value')); + settings['web_ui_session_timeout'] = Number($('webUISessionTimeoutInput').getProperty('value')); // Use alternative Web UI const alternative_webui_enabled = $('use_alt_webui_checkbox').getProperty('checked'); @@ -2749,105 +2740,101 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD alert("QBT_TR(The alternative Web UI files location cannot be blank.)QBT_TR[CONTEXT=OptionsDialog]"); return; } - settings.set('alternative_webui_enabled', alternative_webui_enabled); - settings.set('alternative_webui_path', webui_files_location_textarea); + settings['alternative_webui_enabled'] = alternative_webui_enabled; + settings['alternative_webui_path'] = webui_files_location_textarea; // Security - settings.set('web_ui_clickjacking_protection_enabled', $('clickjacking_protection_checkbox').getProperty('checked')); - settings.set('web_ui_csrf_protection_enabled', $('csrf_protection_checkbox').getProperty('checked')); - settings.set('web_ui_secure_cookie_enabled', $('secureCookieCheckbox').getProperty('checked')); - settings.set('web_ui_host_header_validation_enabled', $('host_header_validation_checkbox').getProperty('checked')); + settings['web_ui_clickjacking_protection_enabled'] = $('clickjacking_protection_checkbox').getProperty('checked'); + settings['web_ui_csrf_protection_enabled'] = $('csrf_protection_checkbox').getProperty('checked'); + settings['web_ui_secure_cookie_enabled'] = $('secureCookieCheckbox').getProperty('checked'); + settings['web_ui_host_header_validation_enabled'] = $('host_header_validation_checkbox').getProperty('checked'); // Custom HTTP headers - settings.set('web_ui_use_custom_http_headers_enabled', $('webUIUseCustomHTTPHeadersCheckbox').getProperty('checked')); - settings.set('web_ui_custom_http_headers', $('webUICustomHTTPHeadersTextarea').getProperty('value')); + settings['web_ui_use_custom_http_headers_enabled'] = $('webUIUseCustomHTTPHeadersCheckbox').getProperty('checked'); + settings['web_ui_custom_http_headers'] = $('webUICustomHTTPHeadersTextarea').getProperty('value'); // Reverse Proxy - settings.set('web_ui_reverse_proxy_enabled', $('webUIReverseProxySupportCheckbox').getProperty('checked')); - settings.set('web_ui_reverse_proxies_list', $('webUIReverseProxiesListTextarea').getProperty('value')); + settings['web_ui_reverse_proxy_enabled'] = $('webUIReverseProxySupportCheckbox').getProperty('checked'); + settings['web_ui_reverse_proxies_list'] = $('webUIReverseProxiesListTextarea').getProperty('value'); // Update my dynamic domain name - settings.set('dyndns_enabled', $('use_dyndns_checkbox').getProperty('checked')); - settings.set('dyndns_service', Number($('dyndns_select').getProperty('value'))); - settings.set('dyndns_domain', $('dyndns_domain_text').getProperty('value')); - settings.set('dyndns_username', $('dyndns_username_text').getProperty('value')); - settings.set('dyndns_password', $('dyndns_password_text').getProperty('value')); + settings['dyndns_enabled'] = $('use_dyndns_checkbox').getProperty('checked'); + settings['dyndns_service'] = Number($('dyndns_select').getProperty('value')); + settings['dyndns_domain'] = $('dyndns_domain_text').getProperty('value'); + settings['dyndns_username'] = $('dyndns_username_text').getProperty('value'); + settings['dyndns_password'] = $('dyndns_password_text').getProperty('value'); // Update advanced settings // qBittorrent section - settings.set('resume_data_storage_type', $('resumeDataStorageType').getProperty('value')); - settings.set('memory_working_set_limit', Number($('memoryWorkingSetLimit').getProperty('value'))); - settings.set('current_network_interface', $('networkInterface').getProperty('value')); - settings.set('current_interface_address', $('optionalIPAddressToBind').getProperty('value')); - settings.set('save_resume_data_interval', Number($('saveResumeDataInterval').getProperty('value'))); - settings.set('torrent_file_size_limit', ($('torrentFileSizeLimit').getProperty('value') * 1024 * 1024)); - settings.set('recheck_completed_torrents', $('recheckTorrentsOnCompletion').getProperty('checked')); - settings.set('refresh_interval', Number($('refreshInterval').getProperty('value'))); - settings.set('resolve_peer_countries', $('resolvePeerCountries').getProperty('checked')); - settings.set('reannounce_when_address_changed', $('reannounceWhenAddressChanged').getProperty('checked')); + settings['resume_data_storage_type'] = $('resumeDataStorageType').getProperty('value'); + settings['memory_working_set_limit'] = Number($('memoryWorkingSetLimit').getProperty('value')); + settings['current_network_interface'] = $('networkInterface').getProperty('value'); + settings['current_interface_address'] = $('optionalIPAddressToBind').getProperty('value'); + settings['save_resume_data_interval'] = Number($('saveResumeDataInterval').getProperty('value')); + settings['torrent_file_size_limit'] = ($('torrentFileSizeLimit').getProperty('value') * 1024 * 1024); + settings['recheck_completed_torrents'] = $('recheckTorrentsOnCompletion').getProperty('checked'); + settings['refresh_interval'] = Number($('refreshInterval').getProperty('value')); + settings['resolve_peer_countries'] = $('resolvePeerCountries').getProperty('checked'); + settings['reannounce_when_address_changed'] = $('reannounceWhenAddressChanged').getProperty('checked'); // libtorrent section - settings.set('bdecode_depth_limit', Number($('bdecodeDepthLimit').getProperty('value'))); - settings.set('bdecode_token_limit', Number($('bdecodeTokenLimit').getProperty('value'))); - settings.set('async_io_threads', Number($('asyncIOThreads').getProperty('value'))); - settings.set('hashing_threads', Number($('hashingThreads').getProperty('value'))); - settings.set('file_pool_size', Number($('filePoolSize').getProperty('value'))); - settings.set('checking_memory_use', Number($('outstandMemoryWhenCheckingTorrents').getProperty('value'))); - settings.set('disk_cache', Number($('diskCache').getProperty('value'))); - settings.set('disk_cache_ttl', Number($('diskCacheExpiryInterval').getProperty('value'))); - settings.set('disk_queue_size', (Number($('diskQueueSize').getProperty('value')) * 1024)); - settings.set('disk_io_type', Number($('diskIOType').getProperty('value'))); - settings.set('disk_io_read_mode', Number($('diskIOReadMode').getProperty('value'))); - settings.set('disk_io_write_mode', Number($('diskIOWriteMode').getProperty('value'))); - settings.set('enable_coalesce_read_write', $('coalesceReadsAndWrites').getProperty('checked')); - settings.set('enable_piece_extent_affinity', $('pieceExtentAffinity').getProperty('checked')); - settings.set('enable_upload_suggestions', $('sendUploadPieceSuggestions').getProperty('checked')); - settings.set('send_buffer_watermark', Number($('sendBufferWatermark').getProperty('value'))); - settings.set('send_buffer_low_watermark', Number($('sendBufferLowWatermark').getProperty('value'))); - settings.set('send_buffer_watermark_factor', Number($('sendBufferWatermarkFactor').getProperty('value'))); - settings.set('connection_speed', Number($('connectionSpeed').getProperty('value'))); - settings.set('socket_send_buffer_size', ($('socketSendBufferSize').getProperty('value') * 1024)); - settings.set('socket_receive_buffer_size', ($('socketReceiveBufferSize').getProperty('value') * 1024)); - settings.set('socket_backlog_size', Number($('socketBacklogSize').getProperty('value'))); - settings.set('outgoing_ports_min', Number($('outgoingPortsMin').getProperty('value'))); - settings.set('outgoing_ports_max', Number($('outgoingPortsMax').getProperty('value'))); - settings.set('upnp_lease_duration', Number($('UPnPLeaseDuration').getProperty('value'))); - settings.set('peer_tos', Number($('peerToS').getProperty('value'))); - settings.set('utp_tcp_mixed_mode', Number($('utpTCPMixedModeAlgorithm').getProperty('value'))); - settings.set('idn_support_enabled', $('IDNSupportCheckbox').getProperty('checked')); - settings.set('enable_multi_connections_from_same_ip', $('allowMultipleConnectionsFromTheSameIPAddress').getProperty('checked')); - settings.set('validate_https_tracker_certificate', $('validateHTTPSTrackerCertificate').getProperty('checked')); - settings.set('ssrf_mitigation', $('mitigateSSRF').getProperty('checked')); - settings.set('block_peers_on_privileged_ports', $('blockPeersOnPrivilegedPorts').getProperty('checked')); - settings.set('enable_embedded_tracker', $('enableEmbeddedTracker').getProperty('checked')); - settings.set('embedded_tracker_port', Number($('embeddedTrackerPort').getProperty('value'))); - settings.set('embedded_tracker_port_forwarding', $('embeddedTrackerPortForwarding').getProperty('checked')); - settings.set('mark_of_the_web', $('markOfTheWeb').getProperty('checked')); - settings.set('python_executable_path', $('pythonExecutablePath').getProperty('value')); - settings.set('upload_slots_behavior', Number($('uploadSlotsBehavior').getProperty('value'))); - settings.set('upload_choking_algorithm', Number($('uploadChokingAlgorithm').getProperty('value'))); - settings.set('announce_to_all_trackers', $('announceAllTrackers').getProperty('checked')); - settings.set('announce_to_all_tiers', $('announceAllTiers').getProperty('checked')); - settings.set('announce_ip', $('announceIP').getProperty('value')); - settings.set('max_concurrent_http_announces', Number($('maxConcurrentHTTPAnnounces').getProperty('value'))); - settings.set('stop_tracker_timeout', Number($('stopTrackerTimeout').getProperty('value'))); - settings.set('peer_turnover', Number($('peerTurnover').getProperty('value'))); - settings.set('peer_turnover_cutoff', Number($('peerTurnoverCutoff').getProperty('value'))); - settings.set('peer_turnover_interval', Number($('peerTurnoverInterval').getProperty('value'))); - settings.set('request_queue_size', Number($('requestQueueSize').getProperty('value'))); - settings.set('dht_bootstrap_nodes', $('dhtBootstrapNodes').getProperty('value')); - settings.set('i2p_inbound_quantity', Number($('i2pInboundQuantity').getProperty('value'))); - settings.set('i2p_outbound_quantity', Number($('i2pOutboundQuantity').getProperty('value'))); - settings.set('i2p_inbound_length', Number($('i2pInboundLength').getProperty('value'))); - settings.set('i2p_outbound_length', Number($('i2pOutboundLength').getProperty('value'))); + settings['bdecode_depth_limit'] = Number($('bdecodeDepthLimit').getProperty('value')); + settings['bdecode_token_limit'] = Number($('bdecodeTokenLimit').getProperty('value')); + settings['async_io_threads'] = Number($('asyncIOThreads').getProperty('value')); + settings['hashing_threads'] = Number($('hashingThreads').getProperty('value')); + settings['file_pool_size'] = Number($('filePoolSize').getProperty('value')); + settings['checking_memory_use'] = Number($('outstandMemoryWhenCheckingTorrents').getProperty('value')); + settings['disk_cache'] = Number($('diskCache').getProperty('value')); + settings['disk_cache_ttl'] = Number($('diskCacheExpiryInterval').getProperty('value')); + settings['disk_queue_size'] = (Number($('diskQueueSize').getProperty('value')) * 1024); + settings['disk_io_type'] = Number($('diskIOType').getProperty('value')); + settings['disk_io_read_mode'] = Number($('diskIOReadMode').getProperty('value')); + settings['disk_io_write_mode'] = Number($('diskIOWriteMode').getProperty('value')); + settings['enable_coalesce_read_write'] = $('coalesceReadsAndWrites').getProperty('checked'); + settings['enable_piece_extent_affinity'] = $('pieceExtentAffinity').getProperty('checked'); + settings['enable_upload_suggestions'] = $('sendUploadPieceSuggestions').getProperty('checked'); + settings['send_buffer_watermark'] = Number($('sendBufferWatermark').getProperty('value')); + settings['send_buffer_low_watermark'] = Number($('sendBufferLowWatermark').getProperty('value')); + settings['send_buffer_watermark_factor'] = Number($('sendBufferWatermarkFactor').getProperty('value')); + settings['connection_speed'] = Number($('connectionSpeed').getProperty('value')); + settings['socket_send_buffer_size'] = ($('socketSendBufferSize').getProperty('value') * 1024); + settings['socket_receive_buffer_size'] = ($('socketReceiveBufferSize').getProperty('value') * 1024); + settings['socket_backlog_size'] = Number($('socketBacklogSize').getProperty('value')); + settings['outgoing_ports_min'] = Number($('outgoingPortsMin').getProperty('value')); + settings['outgoing_ports_max'] = Number($('outgoingPortsMax').getProperty('value')); + settings['upnp_lease_duration'] = Number($('UPnPLeaseDuration').getProperty('value')); + settings['peer_tos'] = Number($('peerToS').getProperty('value')); + settings['utp_tcp_mixed_mode'] = Number($('utpTCPMixedModeAlgorithm').getProperty('value')); + settings['idn_support_enabled'] = $('IDNSupportCheckbox').getProperty('checked'); + settings['enable_multi_connections_from_same_ip'] = $('allowMultipleConnectionsFromTheSameIPAddress').getProperty('checked'); + settings['validate_https_tracker_certificate'] = $('validateHTTPSTrackerCertificate').getProperty('checked'); + settings['ssrf_mitigation'] = $('mitigateSSRF').getProperty('checked'); + settings['block_peers_on_privileged_ports'] = $('blockPeersOnPrivilegedPorts').getProperty('checked'); + settings['enable_embedded_tracker'] = $('enableEmbeddedTracker').getProperty('checked'); + settings['embedded_tracker_port'] = Number($('embeddedTrackerPort').getProperty('value')); + settings['embedded_tracker_port_forwarding'] = $('embeddedTrackerPortForwarding').getProperty('checked'); + settings['mark_of_the_web'] = $('markOfTheWeb').getProperty('checked'); + settings['python_executable_path'] = $('pythonExecutablePath').getProperty('value'); + settings['upload_slots_behavior'] = Number($('uploadSlotsBehavior').getProperty('value')); + settings['upload_choking_algorithm'] = Number($('uploadChokingAlgorithm').getProperty('value')); + settings['announce_to_all_trackers'] = $('announceAllTrackers').getProperty('checked'); + settings['announce_to_all_tiers'] = $('announceAllTiers').getProperty('checked'); + settings['announce_ip'] = $('announceIP').getProperty('value'); + settings['max_concurrent_http_announces'] = Number($('maxConcurrentHTTPAnnounces').getProperty('value')); + settings['stop_tracker_timeout'] = Number($('stopTrackerTimeout').getProperty('value')); + settings['peer_turnover'] = Number($('peerTurnover').getProperty('value')); + settings['peer_turnover_cutoff'] = Number($('peerTurnoverCutoff').getProperty('value')); + settings['peer_turnover_interval'] = Number($('peerTurnoverInterval').getProperty('value')); + settings['request_queue_size'] = Number($('requestQueueSize').getProperty('value')); + settings['dht_bootstrap_nodes'] = $('dhtBootstrapNodes').getProperty('value'); + settings['i2p_inbound_quantity'] = Number($('i2pInboundQuantity').getProperty('value')); + settings['i2p_outbound_quantity'] = Number($('i2pOutboundQuantity').getProperty('value')); + settings['i2p_inbound_length'] = Number($('i2pInboundLength').getProperty('value')); + settings['i2p_outbound_length'] = Number($('i2pOutboundLength').getProperty('value')); // Send it to qBT - new Request({ - url: 'api/v2/app/setPreferences', - method: 'post', - data: { - 'json': JSON.encode(settings), - }, + window.parent.qBittorrent.Cache.preferences.set({ + data: settings, onFailure: function() { alert("QBT_TR(Unable to save program preferences, qBittorrent is probably unreachable.)QBT_TR[CONTEXT=HttpServer]"); window.parent.qBittorrent.Client.closeWindows(); @@ -2857,7 +2844,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD window.parent.location.reload(); window.parent.qBittorrent.Client.closeWindows(); } - }).send(); + }); }; $('networkInterface').addEvent('change', function() { diff --git a/src/webui/www/private/views/rss.html b/src/webui/www/private/views/rss.html index 2db79f86f..f2e2f5c42 100644 --- a/src/webui/www/private/views/rss.html +++ b/src/webui/www/private/views/rss.html @@ -189,31 +189,22 @@ let rssArticleTable = new window.qBittorrent.DynamicTable.RssArticleTable(); const init = () => { - new Request.JSON({ - url: 'api/v2/app/preferences', - method: 'get', - noCache: true, - onFailure: () => { - alert('Could not contact qBittorrent'); - }, - onSuccess: (pref) => { - if (!pref.rss_processing_enabled) - $('rssFetchingDisabled').removeClass('invisible'); + const pref = window.parent.qBittorrent.Cache.preferences.get(); - // recalculate heights - let nonPageHeight = $('rssTopBar').getBoundingClientRect().height - + $('desktopHeader').getBoundingClientRect().height - + $('desktopFooterWrapper').getBoundingClientRect().height + 20; - $('rssDetailsView').style.height = 'calc(100vh - ' + nonPageHeight + 'px)'; + if (!pref.rss_processing_enabled) + $('rssFetchingDisabled').removeClass('invisible'); - let nonTableHeight = nonPageHeight + $('rssFeedFixedHeaderDiv').getBoundingClientRect().height; + // recalculate heights + const nonPageHeight = $('rssTopBar').getBoundingClientRect().height + + $('desktopHeader').getBoundingClientRect().height + + $('desktopFooterWrapper').getBoundingClientRect().height + 20; + $('rssDetailsView').style.height = 'calc(100vh - ' + nonPageHeight + 'px)'; - $('rssFeedTableDiv').style.height = 'calc(100vh - ' + nonTableHeight + 'px)'; - $('rssArticleTableDiv').style.height = 'calc(100vh - ' + nonTableHeight + 'px)'; + const nonTableHeight = nonPageHeight + $('rssFeedFixedHeaderDiv').getBoundingClientRect().height; + $('rssFeedTableDiv').style.height = 'calc(100vh - ' + nonTableHeight + 'px)'; + $('rssArticleTableDiv').style.height = 'calc(100vh - ' + nonTableHeight + 'px)'; - $('rssContentView').style.height = 'calc(100% - ' + $('rssTopBar').getBoundingClientRect().height + 'px)'; - } - }).send(); + $('rssContentView').style.height = 'calc(100% - ' + $('rssTopBar').getBoundingClientRect().height + 'px)'; const rssFeedContextMenu = new window.qBittorrent.ContextMenu.RssFeedContextMenu({ targets: '.rssFeedContextMenuTarget', diff --git a/src/webui/www/private/views/rssDownloader.html b/src/webui/www/private/views/rssDownloader.html index 02ab5085e..2e918c971 100644 --- a/src/webui/www/private/views/rssDownloader.html +++ b/src/webui/www/private/views/rssDownloader.html @@ -358,42 +358,34 @@ Supports the formats: S01E01, 1x1, 2017.12.31 and 31.12.2017 (Date formats also let feedList = []; const initRssDownloader = () => { - new Request.JSON({ - url: 'api/v2/app/preferences', - method: 'get', - noCache: true, - onFailure: () => { - alert('Could not contact qBittorrent'); - }, - onSuccess: (pref) => { - if (!pref.rss_auto_downloading_enabled) - $('rssDownloaderDisabled').removeClass('invisible'); + const pref = window.parent.qBittorrent.Cache.preferences.get(); - // recalculate height - let warningHeight = $('rssDownloaderDisabled').getBoundingClientRect().height; + if (!pref.rss_auto_downloading_enabled) + $('rssDownloaderDisabled').removeClass('invisible'); - $('leftRssDownloaderColumn').style.height = 'calc(100% - ' + warningHeight + 'px)'; - $('centerRssDownloaderColumn').style.height = 'calc(100% - ' + warningHeight + 'px)'; - $('rightRssDownloaderColumn').style.height = 'calc(100% - ' + warningHeight + 'px)'; + // recalculate height + const warningHeight = $('rssDownloaderDisabled').getBoundingClientRect().height; - $('rulesTable').style.height = 'calc(100% - ' + $('rulesTableDesc').getBoundingClientRect().height + 'px)'; - $('rssDownloaderArticlesTable').style.height = 'calc(100% - ' + $('articleTableDesc').getBoundingClientRect().height + 'px)'; + $('leftRssDownloaderColumn').style.height = 'calc(100% - ' + warningHeight + 'px)'; + $('centerRssDownloaderColumn').style.height = 'calc(100% - ' + warningHeight + 'px)'; + $('rightRssDownloaderColumn').style.height = 'calc(100% - ' + warningHeight + 'px)'; - let centerRowNotTableHeight = $('saveButton').getBoundingClientRect().height - + $('ruleSettings').getBoundingClientRect().height + 15; + $('rulesTable').style.height = 'calc(100% - ' + $('rulesTableDesc').getBoundingClientRect().height + 'px)'; + $('rssDownloaderArticlesTable').style.height = 'calc(100% - ' + $('articleTableDesc').getBoundingClientRect().height + 'px)'; - $('rssDownloaderFeeds').style.height = 'calc(100% - ' + centerRowNotTableHeight + 'px)'; + const centerRowNotTableHeight = $('saveButton').getBoundingClientRect().height + + $('ruleSettings').getBoundingClientRect().height + 15; - // firefox calculates the height of the table inside fieldset differently and thus doesn't need the offset - if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) { - $('rssDownloaderFeedsTable').style.height = '100%'; - } - else { - let outsideTableHeight = ($('rssDownloaderFeedsTable').getBoundingClientRect().top - $('rssDownloaderFeeds').getBoundingClientRect().top) - 10; - $('rssDownloaderFeedsTable').style.height = 'calc(100% - ' + outsideTableHeight + 'px)'; - } - } - }).send(); + $('rssDownloaderFeeds').style.height = 'calc(100% - ' + centerRowNotTableHeight + 'px)'; + + // firefox calculates the height of the table inside fieldset differently and thus doesn't need the offset + if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) { + $('rssDownloaderFeedsTable').style.height = '100%'; + } + else { + let outsideTableHeight = ($('rssDownloaderFeedsTable').getBoundingClientRect().top - $('rssDownloaderFeeds').getBoundingClientRect().top) - 10; + $('rssDownloaderFeedsTable').style.height = 'calc(100% - ' + outsideTableHeight + 'px)'; + } const rssDownloaderRuleContextMenu = new window.qBittorrent.ContextMenu.RssDownloaderRuleContextMenu({ targets: '', diff --git a/src/webui/www/webui.qrc b/src/webui/www/webui.qrc index a0e4aa325..9cb0e24b2 100644 --- a/src/webui/www/webui.qrc +++ b/src/webui/www/webui.qrc @@ -374,6 +374,7 @@ private/rename_file.html private/rename_files.html private/rename_rule.html + private/scripts/cache.js private/scripts/client.js private/scripts/contextmenu.js private/scripts/download.js