feat: rework settings, conf to detect settings changes better

This commit is contained in:
WorldTeacher
2024-10-01 14:08:45 +02:00
parent 83636f65c2
commit c7309e047b
2 changed files with 86 additions and 65 deletions

View File

@@ -140,7 +140,15 @@ class Config:
self._config[option] = True
else:
raise KeyError(f"Option {option} not found in configuration")
def to_Omegaconf(self):
return omegaconf.OmegaConf.create(self._config)
def updateValue(self, key:str, value):
if self._config is None:
raise RuntimeError("Configuration not loaded")
self._config[key] = value
if __name__ == "__main__":
cfg = Config("config/settings.yaml")
#print(cfg.database.path)

View File

@@ -5,12 +5,6 @@ from src import config
from omegaconf import OmegaConf
import os
class Settings(QtWidgets.QDialog, Ui_Dialog):
def __init__(self):
super(Settings, self).__init__()
@@ -18,26 +12,20 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.setWindowTitle("Einstellungen")
self.setWindowIcon(Icon("settings").icon)
#variables
self.originalSettings = config
self.originalSettings = config.to_Omegaconf()
self.changedSettings = config.to_Omegaconf()
self.shortcuts = config.shortcuts
self.settingschanged = False
self.restart_required = False
self.populateShortcuts()
# buttonbox
self.buttonBox.accepted.connect(self.saveSettings)
self.buttonBox.rejected.connect(self.close)
self.loadSettings()
self.buttonBox.button(
QtWidgets.QDialogButtonBox.StandardButton.Discard
).clicked.connect(self.DiscardSettings)
self.buttonBox.button(
QtWidgets.QDialogButtonBox.StandardButton.Discard
).setEnabled(False)
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
False
)
self.populateShortcuts()
# buttons
self.btn_select_database_backupLocation.clicked.connect(
self.selectBackupLocation
@@ -63,9 +51,7 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
current = shortcut["current"]
self.addShortcut(name, default, current)
#assume the shortcuts will be changed
self.settingschanged = True
self.enableButtonBox()
self.settingschanged = True
def addShortcut(self, name, default, current):
#remove all pages from shortcutchanger
#add new page with name, default and current
@@ -78,17 +64,6 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
keysequenceedit.setKeySequence(current)
self.shortcutchanger.setCellWidget(0, 2, keysequenceedit)
def enableButtonBox(self):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.buttonBox.button(
QtWidgets.QDialogButtonBox.StandardButton.Discard
).setEnabled(True)
def selectBackupLocation(self):
backupLocation = QtWidgets.QFileDialog.getExistingDirectory(
self,
@@ -102,7 +77,7 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
self.settingschanged = True
def selectReportPath(self):
reportPath = QtWidgets.QFileDialog.getExistingDirectory(
@@ -115,7 +90,7 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
self.settingschanged = True
@@ -130,7 +105,8 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
self.settingschanged = True
self.restart_required = True
def selectDatabaseName(self):
@@ -141,7 +117,6 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.originalSettings.database.path,
"Database Files (*.db)",
)
self.database_name.setText(databaseName[0])
self.database_path.setText(databaseName[0].rsplit("/", 1)[0])
self.buttonBox.button(
QtWidgets.QDialogButtonBox.StandardButton.Discard
@@ -149,7 +124,8 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
self.settingschanged = True
self.restart_required = True
def getShortcuts(self):
shortcuts = []
@@ -185,22 +161,58 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
if database_path != self.originalSettings.database.path :
os.makedirs(database_path, exist_ok=True)
self.restart()
# overwrite the original settings
self.originalSettings.institution_name = institution_name
self.originalSettings.loan_duration = default_loan_duration
self.originalSettings.database.backupLocation = database_backupLocation
self.originalSettings.database.path = database_path
self.originalSettings.database.name = database_name
self.originalSettings.delete_inactive_user_duration = delete_inactive_users
self.originalSettings.report.report_day = report_day -1
self.originalSettings.report.path = report_path
self.originalSettings.report.generate_report = report_generate
self.originalSettings.advanced_refresh = refresh_state
self.originalSettings.shortcuts = shortcuts
self.restart_required = True
if shortcuts != self.originalSettings.shortcuts:
self.restart_required = True
# create new Settings
self.changedSettings.institution_name = institution_name
self.changedSettings.loan_duration = default_loan_duration
self.changedSettings.database.backupLocation = database_backupLocation
self.changedSettings.database.path = database_path
self.changedSettings.database.name = database_name
self.changedSettings.delete_inactive_user_duration = delete_inactive_users
self.changedSettings.report.report_day = report_day
self.changedSettings.report.path = report_path
self.changedSettings.report.generate_report = report_generate
self.changedSettings.advanced_refresh = refresh_state
self.changedSettings.shortcuts = shortcuts
changed = self.changedSettings
original = self.originalSettings
if changed == original:
print("No changes")
self.settingschanged = False
self.restart_required = False
else:
print("Changes detected")
self.settingschanged = True
if original.database.path != changed.database.path or original.shortcuts != changed.shortcuts:
self.restart_required = True
# save the new settings
config.save()
self.settingschanged = True
if self.settingschanged:
# save the settings
config.updateValue("institution_name", self.changedSettings.institution_name)
config.updateValue("default_loan_duration", self.changedSettings.loan_duration)
config.updateValue("database.backupLocation", self.changedSettings.database.backupLocation)
config.updateValue("database.path", self.changedSettings.database.path)
config.updateValue("database.name", self.changedSettings.database.name)
config.updateValue("delete_inactive_user_duration", self.changedSettings.delete_inactive_user_duration)
config.updateValue("report.report_day", self.changedSettings.report.report_day)
config.updateValue("report.generate_report", self.changedSettings.report.generate_report)
config.updateValue("report.path", self.changedSettings.report.path)
config.updateValue("advanced_refresh", self.changedSettings.advanced_refresh)
config.updateValue("shortcuts", self.changedSettings.shortcuts)
self.originalSettings = self.changedSettings
config.save()
if self.restart_required:
self.restart()
self.close()
def restart(self):
@@ -208,34 +220,35 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
dialog.setIcon(QtWidgets.QMessageBox.Icon.Information)
dialog.setText("Neustart erforderlich")
dialog.setInformativeText(
"Das Programm muss neu gestartet werden, um die neue Datenbank zu verwenden."
"Das Programm muss neu gestartet werden, um die Änderungen zu übernehmen."
)
dialog.setStandardButtons(QtWidgets.QMessageBox.StandardButton.Ok)
dialog.setDefaultButton(QtWidgets.QMessageBox.StandardButton.Ok)
dialog.setWindowTitle("Neustart erforderlich")
dialog.setWindowIcon(Icon("restart").icon)
dialog.exec()
def DiscardSettings(self):
self.loadSettings()
pass
self.restart_required = False
self.settingschanged = False
def loadSettings(self):
self.institution_name.setText(self.originalSettings.institution_name)
self.institution_name.setText(config.institution_name)
self.default_loan_duration.setValue(
int(self.originalSettings.loan_duration)
int(config.loan_duration)
)
self.delete_inactive_user_duration.setValue(
int(self.originalSettings.delete_inactive_user_duration)
int(config.delete_inactive_user_duration)
)
self.database_backupLocation.setText(
self.originalSettings.database.backupLocation
config.database.backupLocation
)
self.database_path.setText(self.originalSettings.database.path)
self.database_name.setText(self.originalSettings.database.name)
self.report_day.setCurrentIndex(self.originalSettings.report.report_day -1)
self.check_generate_report.setChecked(self.originalSettings.report.generate_report)
self.report_path.setText(self.originalSettings.report.path)
self.returnMode.setChecked(self.originalSettings.advanced_refresh)
self.database_path.setText(config.database.path)
self.database_name.setText(config.database.name)
self.report_day.setCurrentIndex(config.report.report_day)
self.check_generate_report.setChecked(config.report.generate_report)
self.report_path.setText(config.report.path)
self.returnMode.setChecked(config.advanced_refresh)
pass