From 96fa6cb8aa9daa490248787af1153a82314de0c9 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Fri, 13 Jun 2025 20:23:19 +0200 Subject: [PATCH] Konfiguration wird geladen und gespeichert. --- src/conf.py | 37 ++++++++++++++++++++++++------------- src/main.py | 13 +++++++++---- src/ui/AppSettings.py | 2 ++ 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/conf.py b/src/conf.py index d17d2f6..dc1e663 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1,16 +1,17 @@ from os import path from pathlib import Path from sys import platform +from typing import Tuple, Type from pydantic import BaseModel -from pydantic_settings import BaseSettings, SettingsConfigDict +from pydantic_settings import BaseSettings, PydanticBaseSettingsSource, SettingsConfigDict, JsonConfigSettingsSource app_name = "DocuMentor" if platform == "win32": config_path = f"%APPDATA%\\{app_name}\\config.json" -elif platform == "linux" or platform == "linux2": +elif platform in ("linux", "linux2"): config_path = f"~/.config/{app_name}/config.json" elif platform == "darwin": config_path = f"~/Library/Application Support/{app_name}/͏͏͏͏config.json" @@ -75,21 +76,31 @@ class AppSettings(BaseSettings): pdf_projects: list[PdfProject] = [] model_config = SettingsConfigDict(json_file=config_path) - + + @classmethod + def settings_customise_sources( + cls, + settings_cls: Type[BaseSettings], + init_settings: PydanticBaseSettingsSource, + env_settings: PydanticBaseSettingsSource, + dotenv_settings: PydanticBaseSettingsSource, + file_secret_settings: PydanticBaseSettingsSource, + ) -> Tuple[PydanticBaseSettingsSource, ...]: + return (JsonConfigSettingsSource(settings_cls),) + def save(self): global config_path - if not config_path.exists(): - # Datei existert nicht - if not config_path.parent.exists(): - # Ordner existiert nicht - config_path.parent.mkdir() - - # Konfiguration speichern - with open(config_path, "wb") as c: - c.write(app_settings.model_dump_json(indent=4).encode()) + if not config_path.parent.exists(): + # Ordner existert nicht + config_path.parent.mkdir(parents=True, exist_ok=True) + + # Konfiguration speichern + with open(config_path, "wb") as c: + c.write(app_settings.model_dump_json(indent=4).encode()) + app_settings = AppSettings() - +print(app_settings) class PdfProjectSettings(BaseSettings): """ diff --git a/src/main.py b/src/main.py index 6816029..6afcf4a 100644 --- a/src/main.py +++ b/src/main.py @@ -6,14 +6,14 @@ from ui.MainWindow import MainWindow from ui.AppSettings import AppSettingsDlg from conf import app_settings -#import qdarktheme +# import qdarktheme def main(): """Haupteinstiegspunkt der Anwendung.""" # QApplication-Instanz erstellen app = QApplication(sys.argv) - + # Dark Theme aktivieren # qdarktheme.setup_theme("auto") @@ -22,8 +22,13 @@ def main(): # Hauptfenster anzeigen window.show() - - if len(app_settings.apache_fops) == 0 or len(app_settings.diff_pdfs) == 0 or len(app_settings.java_vms) == 0 or len(app_settings.saxon_jars): + + if ( + len(app_settings.apache_fops) == 0 + or len(app_settings.diff_pdfs) == 0 + or len(app_settings.java_vms) == 0 + or len(app_settings.saxon_jars) == 0 + ): # Als Modal Dialog öffnen! dlg = AppSettingsDlg(window, app_settings) dlg.exec() diff --git a/src/ui/AppSettings.py b/src/ui/AppSettings.py index f1ae399..c991882 100644 --- a/src/ui/AppSettings.py +++ b/src/ui/AppSettings.py @@ -582,6 +582,8 @@ class AppSettingsDlg(QDialog): self.settings.apache_fops = self.temp_apache_fops.copy() self.settings.xsl_dirs = self.temp_xsl_dirs.copy() + self.settings.save() + super().accept() def get_settings(self) -> AppSettings: