write a settings value only if it has been changed
This commit is contained in:
@@ -13,6 +13,7 @@ from gotify_tray.tasks import (
|
|||||||
CacheSizeTask,
|
CacheSizeTask,
|
||||||
ClearCacheTask,
|
ClearCacheTask,
|
||||||
)
|
)
|
||||||
|
from typing import Any
|
||||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
from ..designs.widget_settings import Ui_Dialog
|
from ..designs.widget_settings import Ui_Dialog
|
||||||
@@ -108,12 +109,24 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
self.cache_size_task.size.connect(lambda size: self.label_cache.setText(f"{round(size/1e6, 1)} MB"))
|
self.cache_size_task.size.connect(lambda size: self.label_cache.setText(f"{round(size/1e6, 1)} MB"))
|
||||||
self.cache_size_task.start()
|
self.cache_size_task.start()
|
||||||
|
|
||||||
|
def set_value(self, key: str, value: Any, widget: QtWidgets.QWidget):
|
||||||
|
"""Set a Settings value, only if the widget's value_changed attribute has been set
|
||||||
|
"""
|
||||||
|
if hasattr(widget, "value_changed"):
|
||||||
|
settings.setValue(key, value)
|
||||||
|
|
||||||
|
def connect_signal(self, signal: QtCore.pyqtBoundSignal, widget: QtWidgets.QWidget):
|
||||||
|
"""Connect to a signal and set the value_changed attribute for a widget on trigger
|
||||||
|
"""
|
||||||
|
signal.connect(lambda *args: self.settings_changed_callback(widget))
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
def settings_changed_callback(self, *args, **kwargs):
|
def settings_changed_callback(self, widget: QtWidgets.QWidget):
|
||||||
self.settings_changed = True
|
self.settings_changed = True
|
||||||
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Apply).setEnabled(True)
|
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Apply).setEnabled(True)
|
||||||
|
setattr(widget, "value_changed", True)
|
||||||
|
|
||||||
def change_font_callback(self, name: str):
|
def change_font_callback(self, name: str):
|
||||||
label: QtWidgets.QLabel = getattr(self.message_widget, "label_" + name)
|
label: QtWidgets.QLabel = getattr(self.message_widget, "label_" + name)
|
||||||
@@ -121,7 +134,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
font, accepted = QtWidgets.QFontDialog.getFont(label.font(), self, f"Select a {name} font")
|
font, accepted = QtWidgets.QFontDialog.getFont(label.font(), self, f"Select a {name} font")
|
||||||
|
|
||||||
if accepted:
|
if accepted:
|
||||||
self.settings_changed_callback()
|
self.settings_changed_callback(label)
|
||||||
label.setFont(font)
|
label.setFont(font)
|
||||||
|
|
||||||
def export_callback(self):
|
def export_callback(self):
|
||||||
@@ -185,22 +198,22 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Apply).clicked.connect(self.apply_settings)
|
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Apply).clicked.connect(self.apply_settings)
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
self.spin_priority.valueChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.spin_priority.valueChanged, self.spin_priority)
|
||||||
self.spin_duration.valueChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.spin_duration.valueChanged, self.spin_duration)
|
||||||
self.cb_notify.stateChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.cb_notify.stateChanged, self.cb_notify)
|
||||||
self.cb_notification_click.stateChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.cb_notification_click.stateChanged, self.cb_notification_click)
|
||||||
self.cb_tray_icon_unread.stateChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.cb_tray_icon_unread.stateChanged, self.cb_tray_icon_unread)
|
||||||
|
|
||||||
# Interface
|
# Interface
|
||||||
self.cb_priority_colors.stateChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.cb_priority_colors.stateChanged, self.cb_priority_colors)
|
||||||
self.cb_locale.stateChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.cb_locale.stateChanged, self.cb_locale)
|
||||||
self.cb_sort_applications.stateChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.cb_sort_applications.stateChanged, self.cb_sort_applications)
|
||||||
|
|
||||||
# Server info
|
# Server info
|
||||||
self.pb_change_server_info.clicked.connect(self.change_server_info_callback)
|
self.pb_change_server_info.clicked.connect(self.change_server_info_callback)
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
self.combo_logging.currentTextChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.combo_logging.currentTextChanged, self.combo_logging)
|
||||||
self.pb_open_log.clicked.connect(lambda: open_file(logger.root.handlers[0].baseFilename))
|
self.pb_open_log.clicked.connect(lambda: open_file(logger.root.handlers[0].baseFilename))
|
||||||
|
|
||||||
# Fonts
|
# Fonts
|
||||||
@@ -214,30 +227,30 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
self.pb_export.clicked.connect(self.export_callback)
|
self.pb_export.clicked.connect(self.export_callback)
|
||||||
self.pb_import.clicked.connect(self.import_callback)
|
self.pb_import.clicked.connect(self.import_callback)
|
||||||
self.pb_reset.clicked.connect(self.reset_callback)
|
self.pb_reset.clicked.connect(self.reset_callback)
|
||||||
self.groupbox_image_popup.toggled.connect(self.settings_changed_callback)
|
self.connect_signal(self.groupbox_image_popup.toggled, self.groupbox_image_popup)
|
||||||
self.spin_popup_w.valueChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.spin_popup_w.valueChanged, self.spin_popup_w)
|
||||||
self.spin_popup_h.valueChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.spin_popup_h.valueChanged, self.spin_popup_h)
|
||||||
self.pb_clear_cache.clicked.connect(self.clear_cache_callback)
|
self.pb_clear_cache.clicked.connect(self.clear_cache_callback)
|
||||||
self.pb_open_cache_dir.clicked.connect(lambda: open_file(Cache().directory()))
|
self.pb_open_cache_dir.clicked.connect(lambda: open_file(Cache().directory()))
|
||||||
self.groupbox_watchdog.toggled.connect(self.settings_changed_callback)
|
self.connect_signal(self.groupbox_watchdog.toggled, self.groupbox_watchdog)
|
||||||
self.spin_watchdog_interval.valueChanged.connect(self.settings_changed_callback)
|
self.connect_signal(self.spin_watchdog_interval.valueChanged, self.spin_watchdog_interval)
|
||||||
|
|
||||||
def apply_settings(self):
|
def apply_settings(self):
|
||||||
# Priority
|
# Priority
|
||||||
settings.setValue("tray/notifications/priority", self.spin_priority.value())
|
self.set_value("tray/notifications/priority", self.spin_priority.value(), self.spin_priority)
|
||||||
settings.setValue("tray/notifications/duration_ms", self.spin_duration.value())
|
self.set_value("tray/notifications/duration_ms", self.spin_duration.value(), self.spin_duration)
|
||||||
settings.setValue("message/check_missed/notify", self.cb_notify.isChecked())
|
self.set_value("message/check_missed/notify", self.cb_notify.isChecked(), self.cb_notify)
|
||||||
settings.setValue("tray/notifications/click", self.cb_notification_click.isChecked())
|
self.set_value("tray/notifications/click", self.cb_notification_click.isChecked(), self.cb_notification_click)
|
||||||
settings.setValue("tray/icon/unread", self.cb_tray_icon_unread.isChecked())
|
self.set_value("tray/icon/unread", self.cb_tray_icon_unread.isChecked(), self.cb_tray_icon_unread)
|
||||||
|
|
||||||
# Interface
|
# Interface
|
||||||
settings.setValue("MessageWidget/priority_color", self.cb_priority_colors.isChecked())
|
self.set_value("MessageWidget/priority_color", self.cb_priority_colors.isChecked(), self.cb_priority_colors)
|
||||||
settings.setValue("locale", self.cb_locale.isChecked())
|
self.set_value("locale", self.cb_locale.isChecked(), self.cb_locale)
|
||||||
settings.setValue("ApplicationModel/sort", self.cb_sort_applications.isChecked())
|
self.set_value("ApplicationModel/sort", self.cb_sort_applications.isChecked(), self.cb_sort_applications)
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
selected_level = self.combo_logging.currentText()
|
selected_level = self.combo_logging.currentText()
|
||||||
settings.setValue("logging/level", selected_level)
|
self.set_value("logging/level", selected_level, self.combo_logging)
|
||||||
if selected_level == "Disabled":
|
if selected_level == "Disabled":
|
||||||
logging.disable(logging.CRITICAL)
|
logging.disable(logging.CRITICAL)
|
||||||
else:
|
else:
|
||||||
@@ -245,20 +258,18 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
logger.setLevel(selected_level)
|
logger.setLevel(selected_level)
|
||||||
|
|
||||||
# Fonts
|
# Fonts
|
||||||
settings.setValue("MessageWidget/font/title", self.message_widget.label_title.font().toString())
|
self.set_value("MessageWidget/font/title", self.message_widget.label_title.font().toString(), self.message_widget.label_title)
|
||||||
settings.setValue("MessageWidget/font/date", self.message_widget.label_date.font().toString())
|
self.set_value("MessageWidget/font/date", self.message_widget.label_date.font().toString(), self.message_widget.label_date)
|
||||||
settings.setValue("MessageWidget/font/message", self.message_widget.label_message.font().toString())
|
self.set_value("MessageWidget/font/message", self.message_widget.label_message.font().toString(), self.message_widget.label_message)
|
||||||
|
|
||||||
# Advanced
|
# Advanced
|
||||||
settings.setValue("ImagePopup/enabled", self.groupbox_image_popup.isChecked())
|
self.set_value("ImagePopup/enabled", self.groupbox_image_popup.isChecked(), self.groupbox_image_popup)
|
||||||
settings.setValue("ImagePopup/w", self.spin_popup_w.value())
|
self.set_value("ImagePopup/w", self.spin_popup_w.value(), self.spin_popup_w)
|
||||||
settings.setValue("ImagePopup/h", self.spin_popup_h.value())
|
self.set_value("ImagePopup/h", self.spin_popup_h.value(), self.spin_popup_h)
|
||||||
settings.setValue("watchdog/enabled", self.groupbox_watchdog.isChecked())
|
self.set_value("watchdog/enabled", self.groupbox_watchdog.isChecked(), self.groupbox_watchdog)
|
||||||
settings.setValue("watchdog/interval/s", self.spin_watchdog_interval.value())
|
self.set_value("watchdog/interval/s", self.spin_watchdog_interval.value(), self.spin_watchdog_interval)
|
||||||
|
|
||||||
self.settings_changed = False
|
self.settings_changed = False
|
||||||
self.buttonBox.button(
|
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Apply).setEnabled(False)
|
||||||
QtWidgets.QDialogButtonBox.StandardButton.Apply
|
|
||||||
).setEnabled(False)
|
|
||||||
|
|
||||||
self.changes_applied = True
|
self.changes_applied = True
|
||||||
|
|||||||
Reference in New Issue
Block a user