import sys import logging from pathlib import Path from PySide6.QtGui import QIcon from PySide6.QtWidgets import QApplication from ui.MainWindow import MainWindow from ui.AppSettings import AppSettingsDlg from conf import app_settings def cleanup_old_logs(log_dir, max_age_hours=24): """ Löscht Log-Dateien, die älter als die angegebene Anzahl von Stunden sind. Args: log_dir: Pfad zum Log-Verzeichnis max_age_hours: Maximales Alter der Log-Dateien in Stunden (Standard: 24) """ import time if not log_dir.exists(): return cutoff_time = time.time() - (max_age_hours * 3600) deleted_count = 0 # Alle .log Dateien im Verzeichnis durchsuchen for log_file in log_dir.glob("*.log"): try: # Änderungszeit der Datei abrufen file_mtime = log_file.stat().st_mtime # Wenn die Datei älter als die Grenzzeit ist, löschen if file_mtime < cutoff_time: log_file.unlink() deleted_count += 1 except Exception as e: logging.warning(f"Fehler beim Löschen von {log_file}: {e}") if deleted_count > 0: logging.info(f"{deleted_count} alte Log-Datei(en) gelöscht (älter als {max_age_hours} Stunden)") def main(): """Haupteinstiegspunkt der Anwendung.""" # Logging konfigurieren - sowohl Datei als auch Konsole from datetime import datetime # Log-Verzeichnis erstellen (im selben Verzeichnis wie config.json) from conf import config_path log_dir = config_path.parent / "logs" log_dir.mkdir(parents=True, exist_ok=True) # Log-Dateiname mit Timestamp timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") log_file = log_dir / f"documentor_{timestamp}.log" # Root-Logger konfigurieren logger = logging.getLogger() logger.setLevel(logging.DEBUG) # Formatter für alle Handler formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%H:%M:%S") # Handler 1: Datei (alles ab DEBUG) file_handler = logging.FileHandler(log_file, encoding="utf-8") file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(formatter) logger.addHandler(file_handler) # Handler 2: Konsole (alles ab INFO) console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) console_handler.setFormatter(formatter) logger.addHandler(console_handler) logging.info(f"Logging initialisiert: {log_file}") # Alte Log-Dateien aufräumen (erst nach Logger-Init) cleanup_old_logs(log_dir, max_age_hours=24) # Unter Windows: AppUserModelID setzen, damit die Taskleiste das richtige Symbol zeigt if sys.platform == "win32": import ctypes ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("de.vitaligraf.documentor") # QApplication-Instanz erstellen app = QApplication(sys.argv) # App-Symbol setzen (PyInstaller: sys._MEIPASS, sonst Quellpfad) if getattr(sys, "frozen", False): icon_path = Path(sys._MEIPASS) / "resources" / "icon.ico" else: icon_path = Path(__file__).parent.parent / "resources" / "icon.ico" if icon_path.exists(): app.setWindowIcon(QIcon(str(icon_path))) # Hauptfenster erstellen window = MainWindow() # 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) == 0 or len(app_settings.xsl_dirs) == 0 or len(app_settings.pdf_projects) == 0 ): # Als Modal Dialog öffnen! dlg = AppSettingsDlg(window, app_settings) dlg.exec() # Anwendung ausführen und Rückgabewert zurückgeben return app.exec() if __name__ == "__main__": sys.exit(main())