Defensive Null-Checks in MainWindow hinzugefügt

Ergänzt umfassende Existenzprüfungen für pdf_project, project und nodes-Attribute
vor dem Zugriff, um NoneType-Fehler zu vermeiden. Verbessert die Robustheit der
Anwendung bei nicht initialisierten Projekten.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-07 20:34:29 +01:00
parent d314cf5612
commit 6e4d28d3a8
+50 -6
View File
@@ -1199,6 +1199,11 @@ class MainWindow(QMainWindow):
QMessageBox.warning(self, "Warnung", "Kein gültiger TreeNode gefunden.")
return
# Prüfe ob Projekt verfügbar ist
if not self.pdf_project:
QMessageBox.warning(self, "Warnung", "Keine Projekt-Einstellungen verfügbar.")
return
# Sammle Eltern-Parameter
parent_params = self._collect_parent_params(item)
@@ -1520,6 +1525,10 @@ class MainWindow(QMainWindow):
bool: True wenn die XML-Datei noch anderswo verwendet wird
"""
try:
# Prüfe ob pdf_project und nodes existieren
if not self.pdf_project or not self.pdf_project.nodes:
return False # Keine Nodes vorhanden, also nicht verwendet
return self._check_xml_usage_recursive(self.pdf_project.nodes, xml_path, exclude_xsl_file)
except Exception as e:
print(f"Fehler beim Prüfen der XML-Datei-Verwendung: {e}")
@@ -1734,15 +1743,20 @@ class MainWindow(QMainWindow):
print(f"Neue Nodes Dictionary erstellt: {len(new_nodes_dict)} Einträge")
# Merge mit vorhandenen Nodes
if self.pdf_project.nodes:
if self.pdf_project and self.pdf_project.nodes:
self._merge_nodes_recursive(self.pdf_project.nodes, new_nodes_dict)
# Füge komplett neue Root-Nodes hinzu
existing_root_ids = {node.id for node in self.pdf_project.nodes}
for new_node in new_nodes:
if new_node.id not in existing_root_ids:
self.pdf_project.nodes.append(new_node)
print(f"Neue Root-Node hinzugefügt: {new_node.bez}")
if self.pdf_project and self.pdf_project.nodes:
existing_root_ids = {node.id for node in self.pdf_project.nodes}
for new_node in new_nodes:
if new_node.id not in existing_root_ids:
self.pdf_project.nodes.append(new_node)
print(f"Neue Root-Node hinzugefügt: {new_node.bez}")
elif self.pdf_project:
# Wenn keine Nodes vorhanden sind, füge alle neuen Nodes hinzu
self.pdf_project.nodes = new_nodes
print(f"Alle {len(new_nodes)} Root-Nodes hinzugefügt (keine vorhandenen Nodes)")
print("Merge abgeschlossen")
@@ -1846,6 +1860,15 @@ class MainWindow(QMainWindow):
current_project: Das aktuelle Projekt
"""
try:
# Prüfe ob pdf_project und project existieren
if not self.pdf_project:
print("Keine Projekt-Einstellungen zum Speichern verfügbar")
return
if not self.project or not self.project.project_dir:
print("Kein Projekt-Verzeichnis zum Speichern verfügbar")
return
start_time = time.time()
# Speichere in project.yaml im Projekt-Verzeichnis
@@ -1999,6 +2022,11 @@ class MainWindow(QMainWindow):
QMessageBox.critical(self, "Fehler", f"Die XML-Datei existiert nicht:\n{xml_file_path}")
return
# Prüfe ob Projekt-Nodes verfügbar sind
if not self.pdf_project or not self.pdf_project.nodes:
QMessageBox.warning(self, "Warnung", "Keine Projekt-Nodes verfügbar für die Zuordnung.")
return
# Öffne den Dialog zur Zuordnung zu XSL-Knoten
dialog = XmlToXslAssignDialog(
parent=self,
@@ -2075,6 +2103,11 @@ class MainWindow(QMainWindow):
logger.info(f"Starte Hash-Berechnung für {len(xml_files)} XML-Dateien")
# Prüfe ob Projekt verfügbar ist
if not self.project or not self.project.project_dir:
logger.warning("Kein Projekt-Verzeichnis für Hash-Berechnung verfügbar")
return
# Stoppe vorherigen Thread falls noch aktiv
if self.hash_calculator_thread and self.hash_calculator_thread.isRunning():
self.hash_calculator_thread.quit()
@@ -2193,6 +2226,11 @@ class MainWindow(QMainWindow):
logger.debug(f"Hash bereits vorhanden für {xml_file.xml}: {xml_file.hashsum}")
return
# Prüfe ob Projekt verfügbar ist
if not self.project or not self.project.project_dir:
logger.warning("Kein Projekt-Verzeichnis für Hash-Berechnung verfügbar")
return
xml_file_path = Path(self.project.project_dir) / xml_file.xml
if not xml_file_path.exists():
@@ -2434,6 +2472,12 @@ class MainWindow(QMainWindow):
file_hash: Berechneter Hash der Datei
"""
try:
# Prüfe ob Projekt verfügbar ist
if not self.project or not self.project.project_dir:
logger.error("Kein Projekt-Verzeichnis für neue XML-Datei verfügbar")
QMessageBox.critical(self, "Fehler", "Kein Projekt-Verzeichnis verfügbar.")
return
# Erstelle xml-Ordner im Projekt-Verzeichnis falls er nicht existiert
xml_dir = Path(self.project.project_dir) / "xml"
xml_dir.mkdir(parents=True, exist_ok=True)