Files

44 lines
1.3 KiB
Python

"""QThread wrapper. Supports three task types: main, lrc, embed."""
from __future__ import annotations
import threading
from PySide6.QtCore import QThread, Signal
from core.config import PipelineConfig
class PipelineWorker(QThread):
log = Signal(str)
progress = Signal(int, int, str) # done, total, stage
finished_ok = Signal(list)
failed = Signal(str)
def __init__(self, config: PipelineConfig, task: str = "main", parent=None):
super().__init__(parent)
self._config = config
self._task = task
self._stop_event = threading.Event()
def stop(self) -> None:
self._stop_event.set()
def run(self) -> None:
try:
if self._task == "lrc":
from core.lrc_pipeline import run_lrc_pipeline as runner
elif self._task == "embed":
from core.lrc_pipeline import run_embed_pipeline as runner
else:
from core.pipeline import run_pipeline as runner
results = runner(
self._config,
log=self.log.emit,
on_progress=lambda d, t, s: self.progress.emit(d, t, s),
stop_event=self._stop_event,
)
self.finished_ok.emit(results)
except Exception as exc: # noqa: BLE001
self.failed.emit(f"{type(exc).__name__}: {exc}")