add option to clear the image cache

This commit is contained in:
dries.k
2022-12-04 19:55:31 +01:00
parent 12f6e028fb
commit 953e1db6f1
5 changed files with 106 additions and 7 deletions

View File

@@ -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()

View File

@@ -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", "..."))

View File

@@ -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">

View File

@@ -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

View File

@@ -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()