init biliup-next
This commit is contained in:
28
src/biliup_next/modules/song_detect/service.py
Normal file
28
src/biliup_next/modules/song_detect/service.py
Normal file
@ -0,0 +1,28 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from biliup_next.core.models import Artifact, utc_now_iso
|
||||
from biliup_next.core.registry import Registry
|
||||
from biliup_next.infra.task_repository import TaskRepository
|
||||
|
||||
|
||||
class SongDetectService:
|
||||
def __init__(self, registry: Registry, repo: TaskRepository):
|
||||
self.registry = registry
|
||||
self.repo = repo
|
||||
|
||||
def run(self, task_id: str, settings: dict[str, object]) -> tuple[Artifact, Artifact]:
|
||||
task = self.repo.get_task(task_id)
|
||||
if task is None:
|
||||
raise RuntimeError(f"task not found: {task_id}")
|
||||
artifacts = self.repo.list_artifacts(task_id)
|
||||
subtitle_srt = next(a for a in artifacts if a.artifact_type == "subtitle_srt")
|
||||
provider = self.registry.get("song_detector", str(settings.get("provider", "codex")))
|
||||
started_at = utc_now_iso()
|
||||
self.repo.update_step_status(task_id, "song_detect", "running", started_at=started_at)
|
||||
songs_json, songs_txt = provider.detect(task, subtitle_srt, settings)
|
||||
self.repo.add_artifact(songs_json)
|
||||
self.repo.add_artifact(songs_txt)
|
||||
finished_at = utc_now_iso()
|
||||
self.repo.update_step_status(task_id, "song_detect", "succeeded", finished_at=finished_at)
|
||||
self.repo.update_task_status(task_id, "songs_detected", finished_at)
|
||||
return songs_json, songs_txt
|
||||
Reference in New Issue
Block a user