mirror of
https://github.com/denizsafak/abogen.git
synced 2026-09-20 11:40:57 +02:00
fix: executor subtitle_writer leak + adapter Path/None-default fixes
- executor: manage subtitle_writer via ExitStack (stack.callback) - executor: remove manual subtitle_writer.close() - WebUI adapter: wrap source_path, output_folder, cover_image_path in Path() - WebUI adapter: remove unused threading/time imports - PyQt adapter: fix getattr(attr, None) or default for 4 fields
This commit is contained in:
@@ -134,6 +134,7 @@ def execute_conversion(
|
|||||||
)
|
)
|
||||||
if subtitle_writer:
|
if subtitle_writer:
|
||||||
subtitle_writer.open()
|
subtitle_writer.open()
|
||||||
|
stack.callback(subtitle_writer.close)
|
||||||
result.subtitle_paths.append(subtitle_writer.path)
|
result.subtitle_paths.append(subtitle_writer.path)
|
||||||
|
|
||||||
# Chapter directory
|
# Chapter directory
|
||||||
@@ -381,10 +382,6 @@ def execute_conversion(
|
|||||||
)
|
)
|
||||||
events.log("Outro synthesized.")
|
events.log("Outro synthesized.")
|
||||||
|
|
||||||
# Close subtitle writer
|
|
||||||
if subtitle_writer:
|
|
||||||
subtitle_writer.close()
|
|
||||||
|
|
||||||
# Set result metadata
|
# Set result metadata
|
||||||
result.total_chapters = len(plan.chapters)
|
result.total_chapters = len(plan.chapters)
|
||||||
result.total_segments = sum(len(ch.segments) for ch in plan.chapters)
|
result.total_segments = sum(len(ch.segments) for ch in plan.chapters)
|
||||||
|
|||||||
@@ -68,12 +68,12 @@ def build_conversion_request_from_thread(thread: Any) -> ConversionRequest:
|
|||||||
voice_profile=getattr(thread, "voice_profile", None),
|
voice_profile=getattr(thread, "voice_profile", None),
|
||||||
speed=thread.speed or 1.0,
|
speed=thread.speed or 1.0,
|
||||||
use_gpu=thread.use_gpu,
|
use_gpu=thread.use_gpu,
|
||||||
supertonic_total_steps=getattr(thread, "supertonic_total_steps", 5),
|
supertonic_total_steps=getattr(thread, "supertonic_total_steps", None) or 5,
|
||||||
# Output Format
|
# Output Format
|
||||||
output_format=thread.output_format or "wav",
|
output_format=thread.output_format or "wav",
|
||||||
subtitle_mode=thread.subtitle_mode or "Disabled",
|
subtitle_mode=thread.subtitle_mode or "Disabled",
|
||||||
subtitle_format=getattr(thread, "subtitle_format", "srt"),
|
subtitle_format=getattr(thread, "subtitle_format", "srt"),
|
||||||
max_subtitle_words=getattr(thread, "max_subtitle_words", 50),
|
max_subtitle_words=getattr(thread, "max_subtitle_words", None) or 50,
|
||||||
# Save Options
|
# Save Options
|
||||||
save_mode=thread.save_option or "save_next_to_input",
|
save_mode=thread.save_option or "save_next_to_input",
|
||||||
output_folder=output_folder,
|
output_folder=output_folder,
|
||||||
@@ -82,8 +82,8 @@ def build_conversion_request_from_thread(thread: Any) -> ConversionRequest:
|
|||||||
separate_chapters_format=getattr(thread, "separate_chapters_format", "wav"),
|
separate_chapters_format=getattr(thread, "separate_chapters_format", "wav"),
|
||||||
save_as_project=getattr(thread, "save_as_project", False),
|
save_as_project=getattr(thread, "save_as_project", False),
|
||||||
# Timing
|
# Timing
|
||||||
silence_between_chapters=getattr(thread, "silence_duration", 2.0),
|
silence_between_chapters=getattr(thread, "silence_duration", None) or 2.0,
|
||||||
chapter_intro_delay=getattr(thread, "chapter_intro_delay", 0.0),
|
chapter_intro_delay=getattr(thread, "chapter_intro_delay", None) or 0.0,
|
||||||
# Content Processing
|
# Content Processing
|
||||||
replace_single_newlines=getattr(thread, "replace_single_newlines", False),
|
replace_single_newlines=getattr(thread, "replace_single_newlines", False),
|
||||||
read_title_intro=getattr(thread, "read_title_intro", False),
|
read_title_intro=getattr(thread, "read_title_intro", False),
|
||||||
|
|||||||
@@ -14,8 +14,7 @@ never accesses Job directly.
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import threading
|
from pathlib import Path
|
||||||
import time
|
|
||||||
from typing import Any, Callable, Dict, List, Optional
|
from typing import Any, Callable, Dict, List, Optional
|
||||||
|
|
||||||
from abogen.application.conversion_request import ConversionRequest
|
from abogen.application.conversion_request import ConversionRequest
|
||||||
@@ -36,7 +35,7 @@ def build_conversion_request_from_job(job: Any) -> ConversionRequest:
|
|||||||
"""
|
"""
|
||||||
return ConversionRequest(
|
return ConversionRequest(
|
||||||
# Source
|
# Source
|
||||||
source_path=job.stored_path,
|
source_path=Path(job.stored_path) if job.stored_path else None,
|
||||||
original_filename=job.original_filename,
|
original_filename=job.original_filename,
|
||||||
# TTS Settings
|
# TTS Settings
|
||||||
language=job.language or "a",
|
language=job.language or "a",
|
||||||
@@ -53,7 +52,7 @@ def build_conversion_request_from_job(job: Any) -> ConversionRequest:
|
|||||||
max_subtitle_words=job.max_subtitle_words or 50,
|
max_subtitle_words=job.max_subtitle_words or 50,
|
||||||
# Save Options
|
# Save Options
|
||||||
save_mode=job.save_mode or "save_next_to_input",
|
save_mode=job.save_mode or "save_next_to_input",
|
||||||
output_folder=job.output_folder,
|
output_folder=Path(job.output_folder) if job.output_folder else None,
|
||||||
save_chapters_separately=job.save_chapters_separately,
|
save_chapters_separately=job.save_chapters_separately,
|
||||||
merge_chapters_at_end=job.merge_chapters_at_end,
|
merge_chapters_at_end=job.merge_chapters_at_end,
|
||||||
separate_chapters_format=job.separate_chapters_format or "wav",
|
separate_chapters_format=job.separate_chapters_format or "wav",
|
||||||
@@ -81,7 +80,7 @@ def build_conversion_request_from_job(job: Any) -> ConversionRequest:
|
|||||||
# Metadata
|
# Metadata
|
||||||
metadata_tags=job.metadata_tags or {},
|
metadata_tags=job.metadata_tags or {},
|
||||||
# Artifacts
|
# Artifacts
|
||||||
cover_image_path=job.cover_image_path,
|
cover_image_path=Path(job.cover_image_path) if job.cover_image_path else None,
|
||||||
cover_image_mime=job.cover_image_mime,
|
cover_image_mime=job.cover_image_mime,
|
||||||
generate_epub3=job.generate_epub3,
|
generate_epub3=job.generate_epub3,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user