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:
+45
-1
@@ -1199,6 +1199,11 @@ class MainWindow(QMainWindow):
|
|||||||
QMessageBox.warning(self, "Warnung", "Kein gültiger TreeNode gefunden.")
|
QMessageBox.warning(self, "Warnung", "Kein gültiger TreeNode gefunden.")
|
||||||
return
|
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
|
# Sammle Eltern-Parameter
|
||||||
parent_params = self._collect_parent_params(item)
|
parent_params = self._collect_parent_params(item)
|
||||||
|
|
||||||
@@ -1520,6 +1525,10 @@ class MainWindow(QMainWindow):
|
|||||||
bool: True wenn die XML-Datei noch anderswo verwendet wird
|
bool: True wenn die XML-Datei noch anderswo verwendet wird
|
||||||
"""
|
"""
|
||||||
try:
|
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)
|
return self._check_xml_usage_recursive(self.pdf_project.nodes, xml_path, exclude_xsl_file)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Fehler beim Prüfen der XML-Datei-Verwendung: {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")
|
print(f"Neue Nodes Dictionary erstellt: {len(new_nodes_dict)} Einträge")
|
||||||
|
|
||||||
# Merge mit vorhandenen Nodes
|
# 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)
|
self._merge_nodes_recursive(self.pdf_project.nodes, new_nodes_dict)
|
||||||
|
|
||||||
# Füge komplett neue Root-Nodes hinzu
|
# Füge komplett neue Root-Nodes hinzu
|
||||||
|
if self.pdf_project and self.pdf_project.nodes:
|
||||||
existing_root_ids = {node.id for node in self.pdf_project.nodes}
|
existing_root_ids = {node.id for node in self.pdf_project.nodes}
|
||||||
for new_node in new_nodes:
|
for new_node in new_nodes:
|
||||||
if new_node.id not in existing_root_ids:
|
if new_node.id not in existing_root_ids:
|
||||||
self.pdf_project.nodes.append(new_node)
|
self.pdf_project.nodes.append(new_node)
|
||||||
print(f"Neue Root-Node hinzugefügt: {new_node.bez}")
|
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")
|
print("Merge abgeschlossen")
|
||||||
|
|
||||||
@@ -1846,6 +1860,15 @@ class MainWindow(QMainWindow):
|
|||||||
current_project: Das aktuelle Projekt
|
current_project: Das aktuelle Projekt
|
||||||
"""
|
"""
|
||||||
try:
|
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()
|
start_time = time.time()
|
||||||
|
|
||||||
# Speichere in project.yaml im Projekt-Verzeichnis
|
# 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}")
|
QMessageBox.critical(self, "Fehler", f"Die XML-Datei existiert nicht:\n{xml_file_path}")
|
||||||
return
|
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
|
# Öffne den Dialog zur Zuordnung zu XSL-Knoten
|
||||||
dialog = XmlToXslAssignDialog(
|
dialog = XmlToXslAssignDialog(
|
||||||
parent=self,
|
parent=self,
|
||||||
@@ -2075,6 +2103,11 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
logger.info(f"Starte Hash-Berechnung für {len(xml_files)} XML-Dateien")
|
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
|
# Stoppe vorherigen Thread falls noch aktiv
|
||||||
if self.hash_calculator_thread and self.hash_calculator_thread.isRunning():
|
if self.hash_calculator_thread and self.hash_calculator_thread.isRunning():
|
||||||
self.hash_calculator_thread.quit()
|
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}")
|
logger.debug(f"Hash bereits vorhanden für {xml_file.xml}: {xml_file.hashsum}")
|
||||||
return
|
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
|
xml_file_path = Path(self.project.project_dir) / xml_file.xml
|
||||||
|
|
||||||
if not xml_file_path.exists():
|
if not xml_file_path.exists():
|
||||||
@@ -2434,6 +2472,12 @@ class MainWindow(QMainWindow):
|
|||||||
file_hash: Berechneter Hash der Datei
|
file_hash: Berechneter Hash der Datei
|
||||||
"""
|
"""
|
||||||
try:
|
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
|
# Erstelle xml-Ordner im Projekt-Verzeichnis falls er nicht existiert
|
||||||
xml_dir = Path(self.project.project_dir) / "xml"
|
xml_dir = Path(self.project.project_dir) / "xml"
|
||||||
xml_dir.mkdir(parents=True, exist_ok=True)
|
xml_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user