From 8a220a936cf8f322c72659c67e6a18d33ca55d97 Mon Sep 17 00:00:00 2001 From: Artem Akymenko Date: Mon, 20 Jul 2026 09:49:33 +0000 Subject: [PATCH] refactor: extract extract_metadata_for_file() domain function, delete PyQt wrapper domain/metadata_extraction.py gains extract_metadata_for_file() combining read_text_for_metadata + extract_metadata_from_text. PyQt _extract_metadata_dict deleted, calls replaced with domain function. Tests: 1253 passed --- abogen/domain/metadata_extraction.py | 22 ++++++++++++++++++++++ abogen/pyqt/conversion.py | 23 +++-------------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/abogen/domain/metadata_extraction.py b/abogen/domain/metadata_extraction.py index a3929af..caf8e5c 100644 --- a/abogen/domain/metadata_extraction.py +++ b/abogen/domain/metadata_extraction.py @@ -195,6 +195,28 @@ def read_text_for_metadata( return "" +def extract_metadata_for_file( + file_path: str, + is_direct_text: bool = False, +) -> Dict[str, Optional[str]]: + """Extract metadata dict from a file or direct text. + + Convenience function combining read_text_for_metadata + extract_metadata_from_text. + Returns empty dict on any error. + """ + try: + text = read_text_for_metadata( + file_path=file_path, + is_direct_text=is_direct_text, + direct_text=file_path if is_direct_text else None, + ) + if text: + return extract_metadata_from_text(text) or {} + except Exception: + pass + return {} + + def format_metadata_tags( metadata: Dict[str, Any], filename: str, diff --git a/abogen/pyqt/conversion.py b/abogen/pyqt/conversion.py index 5429425..4537518 100644 --- a/abogen/pyqt/conversion.py +++ b/abogen/pyqt/conversion.py @@ -55,8 +55,7 @@ from abogen.domain.pronunciation import ( ) from abogen.domain.metadata_extraction import ( extract_metadata_and_build_args, - extract_metadata_from_text, - read_text_for_metadata, + extract_metadata_for_file, ) from abogen.domain.text_chapters import parse_chapters_from_text from abogen.infrastructure.exporters import ExportService @@ -67,22 +66,6 @@ import subprocess -def _extract_metadata_dict(file_name: str, is_direct_text: bool) -> dict: - """Extract metadata dict from file for intro/outro text building.""" - try: - from abogen.domain.metadata_extraction import read_text_for_metadata, extract_metadata_from_text - text = read_text_for_metadata( - file_path=file_name, - is_direct_text=is_direct_text, - direct_text=file_name if is_direct_text else None, - ) - if text: - return extract_metadata_from_text(text) or {} - except Exception: - pass - return {} - - # Configuration constants _USER_RESPONSE_TIMEOUT = ( 0.1 # Timeout in seconds for checking user response/cancellation @@ -776,7 +759,7 @@ class ConversionThread(QThread): intro_emitted = False if merge_chapters_at_end: intro_spec = resolve_intro( - _extract_metadata_dict(self.file_name, self.is_direct_text), + extract_metadata_for_file(self.file_name, self.is_direct_text), os.path.basename(self.file_name) if self.file_name else "", getattr(self, "read_title_intro", False), self.voice, self.voice, list(self.voice_cache._cache.keys()), @@ -1101,7 +1084,7 @@ class ConversionThread(QThread): # --- Outro synthesis --- if merge_chapters_at_end: outro_spec = resolve_outro( - _extract_metadata_dict(self.file_name, self.is_direct_text), + extract_metadata_for_file(self.file_name, self.is_direct_text), os.path.basename(self.file_name) if self.file_name else "", getattr(self, "read_closing_outro", True), self.voice, self.voice, list(self.voice_cache._cache.keys()),