feat: rework settings, conf to detect settings changes better
This commit is contained in:
@@ -141,6 +141,14 @@ class Config:
|
||||
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)
|
||||
|
||||
@@ -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
|
||||
@@ -64,8 +52,6 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
|
||||
self.addShortcut(name, default, current)
|
||||
#assume the shortcuts will be changed
|
||||
self.settingschanged = True
|
||||
self.enableButtonBox()
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user