diff --git a/src/ui/threads.py b/src/ui/threads.py index 56f7827..6f95d94 100644 --- a/src/ui/threads.py +++ b/src/ui/threads.py @@ -247,10 +247,13 @@ class XmlBatchProcessingThread(QThread): # Bestimme Ziel-Pfad target_xml_path = xml_dir / xml_file_path.name + # Set aller bereits im Projekt verwendeten Dateinamen — einmalig aufbauen + used_filenames = self._collect_project_filenames() + # Prüfe auf Namenskonflikte und generiere ggf. alternativen Namen original_name = xml_file_path.name counter = 1 - while target_xml_path.exists() or self._is_filename_used_in_project(Path("xml") / target_xml_path.name): + while target_xml_path.exists() or (Path("xml") / target_xml_path.name) in used_filenames: # Generiere alternativen Namen stem = xml_file_path.stem suffix = xml_file_path.suffix @@ -290,23 +293,20 @@ class XmlBatchProcessingThread(QThread): except Exception as e: return {"status": "error", "error_msg": str(e)} - def _is_filename_used_in_project(self, filename: Path) -> bool: - """Prüft ob ein Dateiname bereits im Projekt verwendet wird.""" - if not self.pdf_project.nodes: - return False + def _collect_project_filenames(self) -> set[Path]: + """Gibt ein Set aller im Projekt verwendeten XML-Dateipfade zurück.""" + result: set[Path] = set() - def search_recursive(nodes): + def collect(nodes): for node in nodes: if isinstance(node, XslFile) and node.xmls: for xml_file in node.xmls: - if xml_file.xml == filename: - return True + result.add(xml_file.xml) elif isinstance(node, TreeNode) and node.children: - if search_recursive(node.children): - return True - return False + collect(node.children) - return search_recursive(self.pdf_project.nodes) + collect(self.pdf_project.nodes or []) + return result def _update_stats(self, result: dict): """Aktualisiert die Statistiken."""