add option to clear the image cache
This commit is contained in:
@@ -32,6 +32,9 @@ class Cache(object):
|
|||||||
self.cache_dir = os.path.join(path, "cache")
|
self.cache_dir = os.path.join(path, "cache")
|
||||||
os.makedirs(self.cache_dir, exist_ok=True)
|
os.makedirs(self.cache_dir, exist_ok=True)
|
||||||
|
|
||||||
|
def directory(self) -> str:
|
||||||
|
return self.cache_dir
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
self.cursor.execute("DELETE FROM cache")
|
self.cursor.execute("DELETE FROM cache")
|
||||||
self.database.commit()
|
self.database.commit()
|
||||||
|
|||||||
@@ -171,6 +171,22 @@ class Ui_Dialog(object):
|
|||||||
self.horizontalLayout_4.addItem(spacerItem5)
|
self.horizontalLayout_4.addItem(spacerItem5)
|
||||||
self.gridLayout_2.addLayout(self.horizontalLayout_4, 0, 0, 1, 1)
|
self.gridLayout_2.addLayout(self.horizontalLayout_4, 0, 0, 1, 1)
|
||||||
self.verticalLayout.addWidget(self.groupbox_image_popup)
|
self.verticalLayout.addWidget(self.groupbox_image_popup)
|
||||||
|
self.groupBox_cache = QtWidgets.QGroupBox(self.tab_advanced)
|
||||||
|
self.groupBox_cache.setObjectName("groupBox_cache")
|
||||||
|
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.groupBox_cache)
|
||||||
|
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
|
||||||
|
self.pb_clear_cache = QtWidgets.QPushButton(self.groupBox_cache)
|
||||||
|
self.pb_clear_cache.setObjectName("pb_clear_cache")
|
||||||
|
self.horizontalLayout_6.addWidget(self.pb_clear_cache)
|
||||||
|
self.pb_open_cache_dir = QtWidgets.QPushButton(self.groupBox_cache)
|
||||||
|
self.pb_open_cache_dir.setObjectName("pb_open_cache_dir")
|
||||||
|
self.horizontalLayout_6.addWidget(self.pb_open_cache_dir)
|
||||||
|
self.label_cache = QtWidgets.QLabel(self.groupBox_cache)
|
||||||
|
self.label_cache.setObjectName("label_cache")
|
||||||
|
self.horizontalLayout_6.addWidget(self.label_cache)
|
||||||
|
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
||||||
|
self.horizontalLayout_6.addItem(spacerItem6)
|
||||||
|
self.verticalLayout.addWidget(self.groupBox_cache)
|
||||||
self.groupBox_logging = QtWidgets.QGroupBox(self.tab_advanced)
|
self.groupBox_logging = QtWidgets.QGroupBox(self.tab_advanced)
|
||||||
self.groupBox_logging.setObjectName("groupBox_logging")
|
self.groupBox_logging.setObjectName("groupBox_logging")
|
||||||
self.gridLayout_6 = QtWidgets.QGridLayout(self.groupBox_logging)
|
self.gridLayout_6 = QtWidgets.QGridLayout(self.groupBox_logging)
|
||||||
@@ -178,8 +194,8 @@ class Ui_Dialog(object):
|
|||||||
self.combo_logging = QtWidgets.QComboBox(self.groupBox_logging)
|
self.combo_logging = QtWidgets.QComboBox(self.groupBox_logging)
|
||||||
self.combo_logging.setObjectName("combo_logging")
|
self.combo_logging.setObjectName("combo_logging")
|
||||||
self.gridLayout_6.addWidget(self.combo_logging, 0, 1, 1, 1)
|
self.gridLayout_6.addWidget(self.combo_logging, 0, 1, 1, 1)
|
||||||
spacerItem6 = QtWidgets.QSpacerItem(190, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
spacerItem7 = QtWidgets.QSpacerItem(190, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
||||||
self.gridLayout_6.addItem(spacerItem6, 0, 3, 1, 1)
|
self.gridLayout_6.addItem(spacerItem7, 0, 3, 1, 1)
|
||||||
self.pb_open_log = QtWidgets.QPushButton(self.groupBox_logging)
|
self.pb_open_log = QtWidgets.QPushButton(self.groupBox_logging)
|
||||||
self.pb_open_log.setMaximumSize(QtCore.QSize(30, 16777215))
|
self.pb_open_log.setMaximumSize(QtCore.QSize(30, 16777215))
|
||||||
self.pb_open_log.setObjectName("pb_open_log")
|
self.pb_open_log.setObjectName("pb_open_log")
|
||||||
@@ -188,8 +204,8 @@ class Ui_Dialog(object):
|
|||||||
self.label_logging.setObjectName("label_logging")
|
self.label_logging.setObjectName("label_logging")
|
||||||
self.gridLayout_6.addWidget(self.label_logging, 0, 0, 1, 1)
|
self.gridLayout_6.addWidget(self.label_logging, 0, 0, 1, 1)
|
||||||
self.verticalLayout.addWidget(self.groupBox_logging)
|
self.verticalLayout.addWidget(self.groupBox_logging)
|
||||||
spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
|
spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
self.verticalLayout.addItem(spacerItem7)
|
self.verticalLayout.addItem(spacerItem8)
|
||||||
self.tabWidget.addTab(self.tab_advanced, "")
|
self.tabWidget.addTab(self.tab_advanced, "")
|
||||||
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
|
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
|
||||||
|
|
||||||
@@ -238,6 +254,10 @@ class Ui_Dialog(object):
|
|||||||
self.label_2.setToolTip(_translate("Dialog", "Maximum pop-up height"))
|
self.label_2.setToolTip(_translate("Dialog", "Maximum pop-up height"))
|
||||||
self.label_2.setText(_translate("Dialog", "Height"))
|
self.label_2.setText(_translate("Dialog", "Height"))
|
||||||
self.spin_popup_h.setToolTip(_translate("Dialog", "Maximum pop-up height"))
|
self.spin_popup_h.setToolTip(_translate("Dialog", "Maximum pop-up height"))
|
||||||
|
self.groupBox_cache.setTitle(_translate("Dialog", "Cache"))
|
||||||
|
self.pb_clear_cache.setText(_translate("Dialog", "Clear"))
|
||||||
|
self.pb_open_cache_dir.setText(_translate("Dialog", "Open"))
|
||||||
|
self.label_cache.setText(_translate("Dialog", "TextLabel"))
|
||||||
self.groupBox_logging.setTitle(_translate("Dialog", "Logging"))
|
self.groupBox_logging.setTitle(_translate("Dialog", "Logging"))
|
||||||
self.pb_open_log.setToolTip(_translate("Dialog", "Open logfile"))
|
self.pb_open_log.setToolTip(_translate("Dialog", "Open logfile"))
|
||||||
self.pb_open_log.setText(_translate("Dialog", "..."))
|
self.pb_open_log.setText(_translate("Dialog", "..."))
|
||||||
|
|||||||
@@ -400,6 +400,49 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_cache">
|
||||||
|
<property name="title">
|
||||||
|
<string>Cache</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pb_clear_cache">
|
||||||
|
<property name="text">
|
||||||
|
<string>Clear</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pb_open_cache_dir">
|
||||||
|
<property name="text">
|
||||||
|
<string>Open</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_cache">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_6">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_logging">
|
<widget class="QGroupBox" name="groupBox_logging">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ import logging
|
|||||||
import platform
|
import platform
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from gotify_tray.database import Settings
|
from gotify_tray.database import Cache, Settings
|
||||||
from gotify_tray.gotify import GotifyMessageModel
|
from gotify_tray.gotify import GotifyMessageModel
|
||||||
from gotify_tray.gui.models import MessagesModelItem
|
from gotify_tray.gui.models import MessagesModelItem
|
||||||
from . import MessageWidget
|
from . import MessageWidget
|
||||||
from gotify_tray.utils import get_icon, verify_server, open_file
|
from gotify_tray.utils import get_icon, verify_server, open_file
|
||||||
from gotify_tray.tasks import ExportSettingsTask, ImportSettingsTask
|
from gotify_tray.tasks import ExportSettingsTask, ImportSettingsTask, CacheSizeTask, ClearCacheTask
|
||||||
from gotify_tray.gui.themes import get_themes
|
from gotify_tray.gui.themes import get_themes
|
||||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
@@ -91,6 +91,8 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
)
|
)
|
||||||
self.spin_popup_w.setValue(settings.value("ImagePopup/w", type=int))
|
self.spin_popup_w.setValue(settings.value("ImagePopup/w", type=int))
|
||||||
self.spin_popup_h.setValue(settings.value("ImagePopup/h", type=int))
|
self.spin_popup_h.setValue(settings.value("ImagePopup/h", type=int))
|
||||||
|
self.label_cache.setText("0 MB")
|
||||||
|
self.compute_cache_size()
|
||||||
|
|
||||||
def add_message_widget(self):
|
def add_message_widget(self):
|
||||||
self.message_widget = MessageWidget(
|
self.message_widget = MessageWidget(
|
||||||
@@ -108,6 +110,11 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
)
|
)
|
||||||
self.layout_fonts_message.addWidget(self.message_widget)
|
self.layout_fonts_message.addWidget(self.message_widget)
|
||||||
|
|
||||||
|
def compute_cache_size(self):
|
||||||
|
self.cache_size_task = CacheSizeTask()
|
||||||
|
self.cache_size_task.size.connect(lambda size: self.label_cache.setText(f"{round(size/1e6, 1)} MB"))
|
||||||
|
self.cache_size_task.start()
|
||||||
|
|
||||||
def change_server_info_callback(self):
|
def change_server_info_callback(self):
|
||||||
self.server_changed = verify_server(force_new=True, enable_import=False)
|
self.server_changed = verify_server(force_new=True, enable_import=False)
|
||||||
|
|
||||||
@@ -180,6 +187,11 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
settings.clear()
|
settings.clear()
|
||||||
self.quit_requested.emit()
|
self.quit_requested.emit()
|
||||||
|
|
||||||
|
def clear_cache_callback(self):
|
||||||
|
self.clear_cache_task = ClearCacheTask()
|
||||||
|
self.clear_cache_task.start()
|
||||||
|
self.label_cache.setText("0 MB")
|
||||||
|
|
||||||
def link_callbacks(self):
|
def link_callbacks(self):
|
||||||
self.buttonBox.button(
|
self.buttonBox.button(
|
||||||
QtWidgets.QDialogButtonBox.StandardButton.Apply
|
QtWidgets.QDialogButtonBox.StandardButton.Apply
|
||||||
@@ -224,6 +236,8 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
self.groupbox_image_popup.toggled.connect(self.settings_changed_callback)
|
self.groupbox_image_popup.toggled.connect(self.settings_changed_callback)
|
||||||
self.spin_popup_w.valueChanged.connect(self.settings_changed_callback)
|
self.spin_popup_w.valueChanged.connect(self.settings_changed_callback)
|
||||||
self.spin_popup_h.valueChanged.connect(self.settings_changed_callback)
|
self.spin_popup_h.valueChanged.connect(self.settings_changed_callback)
|
||||||
|
self.pb_clear_cache.clicked.connect(self.clear_cache_callback)
|
||||||
|
self.pb_open_cache_dir.clicked.connect(lambda: open_file(Cache().directory()))
|
||||||
|
|
||||||
def apply_settings(self):
|
def apply_settings(self):
|
||||||
# Priority
|
# Priority
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
import abc
|
import abc
|
||||||
|
import glob
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
|
from functools import reduce
|
||||||
from PyQt6 import QtCore
|
from PyQt6 import QtCore
|
||||||
from PyQt6.QtCore import pyqtSignal
|
from PyQt6.QtCore import pyqtSignal
|
||||||
|
|
||||||
from gotify_tray.database import Downloader, Settings
|
from gotify_tray.database import Cache, Downloader, Settings
|
||||||
from gotify_tray.gotify.api import GotifyClient
|
from gotify_tray.gotify.api import GotifyClient
|
||||||
from gotify_tray.gotify.models import GotifyVersionModel
|
from gotify_tray.gotify.models import GotifyVersionModel
|
||||||
from gotify_tray.utils import get_image
|
from gotify_tray.utils import get_image
|
||||||
@@ -229,3 +232,19 @@ class ProcessMessagesTask(BaseTask):
|
|||||||
|
|
||||||
# Prevent locking up the UI when there are a lot of messages with images ready at the same time
|
# Prevent locking up the UI when there are a lot of messages with images ready at the same time
|
||||||
time.sleep(0.001)
|
time.sleep(0.001)
|
||||||
|
|
||||||
|
|
||||||
|
class CacheSizeTask(BaseTask):
|
||||||
|
size = pyqtSignal(int)
|
||||||
|
|
||||||
|
def task(self):
|
||||||
|
cache_dir = Cache().directory()
|
||||||
|
if os.path.exists(cache_dir):
|
||||||
|
cache_size_bytes = reduce(lambda x, f: x + os.path.getsize(f), glob.glob(os.path.join(cache_dir, "*")), 0)
|
||||||
|
self.size.emit(cache_size_bytes)
|
||||||
|
|
||||||
|
class ClearCacheTask(BaseTask):
|
||||||
|
def task(self):
|
||||||
|
cache = Cache()
|
||||||
|
cache.clear()
|
||||||
|
|
||||||
Reference in New Issue
Block a user