diff --git a/picard/const/__init__.py b/picard/const/__init__.py
index 911c674dd..d5a30175d 100644
--- a/picard/const/__init__.py
+++ b/picard/const/__init__.py
@@ -49,7 +49,8 @@ USER_DIR = appdirs.config_folder()
USER_PLUGIN_DIR = appdirs.plugin_folder()
# Network Cache default settings
-CACHE_SIZE_IN_BYTES = 100*1000*1000
+CACHE_SIZE_DISPLAY_UNIT = 1000*1000
+CACHE_SIZE_IN_BYTES = 100*CACHE_SIZE_DISPLAY_UNIT
# AcoustID client API key
ACOUSTID_KEY = 'v8pQ6oyB'
diff --git a/picard/ui/options/network.py b/picard/ui/options/network.py
index 339852d10..2a8e0829e 100644
--- a/picard/ui/options/network.py
+++ b/picard/ui/options/network.py
@@ -28,6 +28,10 @@ from picard.config import (
TextOption,
get_config,
)
+from picard.const import (
+ CACHE_SIZE_DISPLAY_UNIT,
+ CACHE_SIZE_IN_BYTES,
+)
from picard.ui.options import (
OptionsPage,
@@ -56,6 +60,7 @@ class NetworkOptionsPage(OptionsPage):
IntOption('setting', 'browser_integration_port', 8000),
BoolOption('setting', 'browser_integration_localhost_only', True),
IntOption('setting', 'network_transfer_timeout_seconds', 30),
+ IntOption('setting', 'network_cache_size_bytes', CACHE_SIZE_IN_BYTES),
]
def __init__(self, parent=None):
@@ -79,6 +84,7 @@ class NetworkOptionsPage(OptionsPage):
self.ui.browser_integration_port.setValue(config.setting['browser_integration_port'])
self.ui.browser_integration_localhost_only.setChecked(
config.setting['browser_integration_localhost_only'])
+ self.cachesize2display(config)
def save(self):
config = get_config()
@@ -100,6 +106,26 @@ class NetworkOptionsPage(OptionsPage):
config.setting['browser_integration_localhost_only'] = \
self.ui.browser_integration_localhost_only.isChecked()
self.tagger.update_browser_integration()
+ self.display2cachesize(config)
+
+ def display2cachesize(self, config):
+ try:
+ cache_size = int(self.ui.network_cache_size.text())
+ except ValueError:
+ return
+ if cache_size > 0:
+ config.setting['network_cache_size_bytes'] = int(cache_size * CACHE_SIZE_DISPLAY_UNIT)
+
+ def cachesize2display(self, config):
+ try:
+ cache_size = int(config.setting['network_cache_size_bytes'])
+ except ValueError:
+ cache_size = -1
+
+ value = int(cache_size / CACHE_SIZE_DISPLAY_UNIT)
+ if cache_size <= 0:
+ value = CACHE_SIZE_IN_BYTES
+ self.ui.network_cache_size.setText(str(value))
register_options_page(NetworkOptionsPage)
diff --git a/picard/ui/ui_options_network.py b/picard/ui/ui_options_network.py
index afbdd51b2..9927a2586 100644
--- a/picard/ui/ui_options_network.py
+++ b/picard/ui/ui_options_network.py
@@ -1,6 +1,6 @@
# Form implementation generated from reading ui file 'ui/options_network.ui'
#
-# Created by: PyQt6 UI code generator 6.3.1
+# Created by: PyQt6 UI code generator 6.5.3
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.
@@ -12,12 +12,12 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_NetworkOptionsPage(object):
def setupUi(self, NetworkOptionsPage):
NetworkOptionsPage.setObjectName("NetworkOptionsPage")
- NetworkOptionsPage.resize(316, 371)
+ NetworkOptionsPage.resize(316, 491)
self.vboxlayout = QtWidgets.QVBoxLayout(NetworkOptionsPage)
self.vboxlayout.setContentsMargins(9, 9, 9, 9)
self.vboxlayout.setSpacing(6)
self.vboxlayout.setObjectName("vboxlayout")
- self.web_proxy = QtWidgets.QGroupBox(NetworkOptionsPage)
+ self.web_proxy = QtWidgets.QGroupBox(parent=NetworkOptionsPage)
self.web_proxy.setCheckable(True)
self.web_proxy.setObjectName("web_proxy")
self.gridlayout = QtWidgets.QGridLayout(self.web_proxy)
@@ -26,48 +26,52 @@ class Ui_NetworkOptionsPage(object):
self.gridlayout.setObjectName("gridlayout")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.proxy_type_http = QtWidgets.QRadioButton(self.web_proxy)
+ self.proxy_type_http = QtWidgets.QRadioButton(parent=self.web_proxy)
self.proxy_type_http.setChecked(True)
self.proxy_type_http.setObjectName("proxy_type_http")
self.horizontalLayout_2.addWidget(self.proxy_type_http)
- self.proxy_type_socks = QtWidgets.QRadioButton(self.web_proxy)
+ self.proxy_type_socks = QtWidgets.QRadioButton(parent=self.web_proxy)
self.proxy_type_socks.setObjectName("proxy_type_socks")
self.horizontalLayout_2.addWidget(self.proxy_type_socks)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.gridlayout.addLayout(self.horizontalLayout_2, 0, 0, 1, 1)
- self.server_host = QtWidgets.QLineEdit(self.web_proxy)
+ self.server_host = QtWidgets.QLineEdit(parent=self.web_proxy)
self.server_host.setObjectName("server_host")
self.gridlayout.addWidget(self.server_host, 5, 0, 1, 1)
- self.username = QtWidgets.QLineEdit(self.web_proxy)
+ self.username = QtWidgets.QLineEdit(parent=self.web_proxy)
self.username.setObjectName("username")
self.gridlayout.addWidget(self.username, 7, 0, 1, 2)
- self.password = QtWidgets.QLineEdit(self.web_proxy)
+ self.password = QtWidgets.QLineEdit(parent=self.web_proxy)
self.password.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
self.password.setObjectName("password")
self.gridlayout.addWidget(self.password, 9, 0, 1, 2)
- self.server_port = QtWidgets.QSpinBox(self.web_proxy)
+ self.server_port = QtWidgets.QSpinBox(parent=self.web_proxy)
self.server_port.setMinimum(1)
self.server_port.setMaximum(65535)
self.server_port.setProperty("value", 80)
self.server_port.setObjectName("server_port")
self.gridlayout.addWidget(self.server_port, 5, 1, 1, 1)
- self.label_6 = QtWidgets.QLabel(self.web_proxy)
+ self.label_6 = QtWidgets.QLabel(parent=self.web_proxy)
self.label_6.setObjectName("label_6")
self.gridlayout.addWidget(self.label_6, 6, 0, 1, 2)
- self.label_7 = QtWidgets.QLabel(self.web_proxy)
+ self.label_7 = QtWidgets.QLabel(parent=self.web_proxy)
self.label_7.setObjectName("label_7")
self.gridlayout.addWidget(self.label_7, 4, 1, 1, 1)
- self.label_5 = QtWidgets.QLabel(self.web_proxy)
+ self.label_5 = QtWidgets.QLabel(parent=self.web_proxy)
self.label_5.setObjectName("label_5")
self.gridlayout.addWidget(self.label_5, 8, 0, 1, 2)
- self.label = QtWidgets.QLabel(self.web_proxy)
+ self.label = QtWidgets.QLabel(parent=self.web_proxy)
self.label.setObjectName("label")
self.gridlayout.addWidget(self.label, 4, 0, 1, 1)
self.vboxlayout.addWidget(self.web_proxy)
+ self.networkopts = QtWidgets.QGroupBox(parent=NetworkOptionsPage)
+ self.networkopts.setObjectName("networkopts")
+ self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.networkopts)
+ self.verticalLayout_5.setObjectName("verticalLayout_5")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
- self.label_3 = QtWidgets.QLabel(NetworkOptionsPage)
+ self.label_3 = QtWidgets.QLabel(parent=self.networkopts)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -75,13 +79,34 @@ class Ui_NetworkOptionsPage(object):
self.label_3.setSizePolicy(sizePolicy)
self.label_3.setObjectName("label_3")
self.horizontalLayout_3.addWidget(self.label_3)
- self.transfer_timeout = QtWidgets.QSpinBox(NetworkOptionsPage)
+ self.transfer_timeout = QtWidgets.QSpinBox(parent=self.networkopts)
self.transfer_timeout.setMaximum(900)
self.transfer_timeout.setProperty("value", 30)
self.transfer_timeout.setObjectName("transfer_timeout")
self.horizontalLayout_3.addWidget(self.transfer_timeout)
- self.vboxlayout.addLayout(self.horizontalLayout_3)
- self.browser_integration = QtWidgets.QGroupBox(NetworkOptionsPage)
+ self.verticalLayout_5.addLayout(self.horizontalLayout_3)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.label_cache_size = QtWidgets.QLabel(parent=self.networkopts)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.label_cache_size.sizePolicy().hasHeightForWidth())
+ self.label_cache_size.setSizePolicy(sizePolicy)
+ self.label_cache_size.setObjectName("label_cache_size")
+ self.horizontalLayout.addWidget(self.label_cache_size, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.network_cache_size = QtWidgets.QLineEdit(parent=self.networkopts)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.network_cache_size.sizePolicy().hasHeightForWidth())
+ self.network_cache_size.setSizePolicy(sizePolicy)
+ self.network_cache_size.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.network_cache_size.setObjectName("network_cache_size")
+ self.horizontalLayout.addWidget(self.network_cache_size)
+ self.verticalLayout_5.addLayout(self.horizontalLayout)
+ self.vboxlayout.addWidget(self.networkopts, 0, QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.browser_integration = QtWidgets.QGroupBox(parent=NetworkOptionsPage)
self.browser_integration.setCheckable(True)
self.browser_integration.setChecked(True)
self.browser_integration.setObjectName("browser_integration")
@@ -89,7 +114,7 @@ class Ui_NetworkOptionsPage(object):
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
- self.label_2 = QtWidgets.QLabel(self.browser_integration)
+ self.label_2 = QtWidgets.QLabel(parent=self.browser_integration)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -97,14 +122,14 @@ class Ui_NetworkOptionsPage(object):
self.label_2.setSizePolicy(sizePolicy)
self.label_2.setObjectName("label_2")
self.horizontalLayout_4.addWidget(self.label_2)
- self.browser_integration_port = QtWidgets.QSpinBox(self.browser_integration)
+ self.browser_integration_port = QtWidgets.QSpinBox(parent=self.browser_integration)
self.browser_integration_port.setMinimum(1)
self.browser_integration_port.setMaximum(65535)
self.browser_integration_port.setProperty("value", 8000)
self.browser_integration_port.setObjectName("browser_integration_port")
self.horizontalLayout_4.addWidget(self.browser_integration_port)
self.verticalLayout_2.addLayout(self.horizontalLayout_4)
- self.browser_integration_localhost_only = QtWidgets.QCheckBox(self.browser_integration)
+ self.browser_integration_localhost_only = QtWidgets.QCheckBox(parent=self.browser_integration)
self.browser_integration_localhost_only.setChecked(False)
self.browser_integration_localhost_only.setObjectName("browser_integration_localhost_only")
self.verticalLayout_2.addWidget(self.browser_integration_localhost_only)
@@ -123,8 +148,8 @@ class Ui_NetworkOptionsPage(object):
NetworkOptionsPage.setTabOrder(self.server_host, self.server_port)
NetworkOptionsPage.setTabOrder(self.server_port, self.username)
NetworkOptionsPage.setTabOrder(self.username, self.password)
- NetworkOptionsPage.setTabOrder(self.password, self.transfer_timeout)
- NetworkOptionsPage.setTabOrder(self.transfer_timeout, self.browser_integration)
+ NetworkOptionsPage.setTabOrder(self.password, self.network_cache_size)
+ NetworkOptionsPage.setTabOrder(self.network_cache_size, self.browser_integration)
NetworkOptionsPage.setTabOrder(self.browser_integration, self.browser_integration_port)
NetworkOptionsPage.setTabOrder(self.browser_integration_port, self.browser_integration_localhost_only)
@@ -137,7 +162,9 @@ class Ui_NetworkOptionsPage(object):
self.label_7.setText(_("Port:"))
self.label_5.setText(_("Password:"))
self.label.setText(_("Server address:"))
+ self.networkopts.setTitle(_("Network options"))
self.label_3.setText(_("Request timeout in seconds:"))
+ self.label_cache_size.setText(_("Cache size (MB):"))
self.browser_integration.setTitle(_("Browser Integration"))
self.label_2.setText(_("Default listening port:"))
self.browser_integration_localhost_only.setText(_("Listen only on localhost"))
diff --git a/picard/webservice/__init__.py b/picard/webservice/__init__.py
index e50ad01c5..8c2b08ecf 100644
--- a/picard/webservice/__init__.py
+++ b/picard/webservice/__init__.py
@@ -335,9 +335,9 @@ class WebService(QtCore.QObject):
self.manager = QtNetwork.QNetworkAccessManager()
self.manager.sslErrors.connect(self.ssl_errors)
self.oauth_manager = OAuthManager(self)
- self.set_cache()
- self.setup_proxy()
config = get_config()
+ self.set_cache(cache_size_in_bytes=config.setting['network_cache_size_bytes'])
+ self.setup_proxy()
self.set_transfer_timeout(config.setting['network_transfer_timeout_seconds'])
self.manager.finished.connect(self._process_reply)
self._request_methods = {
diff --git a/ui/options_network.ui b/ui/options_network.ui
index 77b09f30c..9e06dc67f 100644
--- a/ui/options_network.ui
+++ b/ui/options_network.ui
@@ -7,7 +7,7 @@
0
0
316
- 371
+ 491
@@ -150,32 +150,71 @@
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
- Request timeout in seconds:
-
-
-
- -
-
-
- 900
-
-
- 30
-
-
-
-
+ -
+
+
+ Network options
+
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Request timeout in seconds:
+
+
+
+ -
+
+
+ 900
+
+
+ 30
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Cache size (MB):
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+
-
@@ -255,7 +294,7 @@
server_port
username
password
- transfer_timeout
+ network_cache_size
browser_integration
browser_integration_port
browser_integration_localhost_only