feat: 音乐识别与刮削统一入口整合

- 音乐识别统一走 recognize_media,移除 MusicChain.recognize/async_recognize 及 /music/search 独立端点
- 音乐刮削收拢到 MediaChain.scrape_music_metadata,消除 MusicChain 对 MediaChain 的嵌套引用
- MetaInfo/MetaInfoPath 增加 force_video 参数,影视附加音轨保留季集归属
- 整理、订阅、搜索、API 层音乐识别入口全部统一
This commit is contained in:
jxxghp
2026-08-09 10:06:54 +08:00
parent 7797d34c48
commit 60aa762ca1
19 changed files with 510 additions and 447 deletions
+10 -4
View File
@@ -14,7 +14,7 @@ from transmission_rpc import File
from app.core.cache import FileCache, AsyncFileCache, fresh, async_fresh
from app.core.config import settings
from app.core.context import Context, MediaInfo, SubtitleInfo, TorrentInfo
from app.core.context import Context, MediaInfo, MusicInfo, SubtitleInfo, TorrentInfo
from app.core.event import EventManager
from app.core.meta import MetaBase
from app.core.module import ModuleManager
@@ -683,7 +683,7 @@ class ChainBase(metaclass=ABCMeta):
bangumiid=bangumiid,
anilistid=anilistid,
)
# 显式 TMDB ID 由模块自行消歧,不能被标题推断类型误导。
# 检索显式 TMDB ID 由请求方自行消歧,不能被标题推断类型误导。
if not mtype and not tmdbid and meta and meta.type in [MediaType.TV, MediaType.MOVIE]:
mtype = meta.type
share_query_meta = share_meta or meta
@@ -705,6 +705,9 @@ class ChainBase(metaclass=ABCMeta):
**module_kwargs,
)
if mediainfo:
# 音乐识别结果不参与影视共享上报
if isinstance(mediainfo, MusicInfo):
return mediainfo
if not mediainfo.recognize_cache_hit:
MoviePilotServerHelper.report_recognize_share(
meta=meta,
@@ -713,7 +716,7 @@ class ChainBase(metaclass=ABCMeta):
)
return mediainfo
if not source and self._can_use_media_recognize_share(
if not source and mtype != MediaType.MUSIC and self._can_use_media_recognize_share(
share_query_meta, tmdbid, doubanid, bangumiid, anilistid
):
shared_cache_meta = self._snapshot_recognize_cache_meta(meta)
@@ -815,6 +818,9 @@ class ChainBase(metaclass=ABCMeta):
**module_kwargs,
)
if mediainfo:
# 音乐识别结果不参与影视共享上报
if isinstance(mediainfo, MusicInfo):
return mediainfo
if not mediainfo.recognize_cache_hit:
await MoviePilotServerHelper.async_report_recognize_share(
meta=meta,
@@ -823,7 +829,7 @@ class ChainBase(metaclass=ABCMeta):
)
return mediainfo
if not source and self._can_use_media_recognize_share(
if not source and mtype != MediaType.MUSIC and self._can_use_media_recognize_share(
share_query_meta, tmdbid, doubanid, bangumiid, anilistid
):
shared_cache_meta = self._snapshot_recognize_cache_meta(meta)