feat(recognize): 影视与音乐统一插件辅助识别链路

- 音乐并入 select_recognize_source 统一选择流程,支持插件优先/原生优先,按 MusicNameRecognize 事件与远端身份谓词区分
- 新增 MediaRecognize 链式事件,与 MusicMediaRecognize 对称,统一为 _supplement_media_recognize 补充识别
- 插件回写统一要求 source 与远端身份,采信后统一上报共享识别
- 插件优先模式下辅助识别未取得身份时保留原生兜底结果
This commit is contained in:
jxxghp
2026-08-11 13:23:37 +08:00
parent a11001cf8b
commit 97a5197e63
6 changed files with 743 additions and 38 deletions
+10 -3
View File
@@ -29,7 +29,7 @@ def _music_info() -> MusicInfo:
def test_media_chain_recognize_by_meta_routes_metamusic_to_module(monkeypatch):
"""MetaMusic 应绕过影视识别,由统一模块分发直接响应。"""
"""MetaMusic 应与影视共用选择流程,由统一模块分发直接响应。"""
meta = MetaMusic(title="晴天", artists=["周杰伦"])
expected = _music_info()
chain = MediaChain()
@@ -37,7 +37,11 @@ def test_media_chain_recognize_by_meta_routes_metamusic_to_module(monkeypatch):
result = chain.recognize_by_meta(meta, source="musicbrainz")
chain.recognize_media.assert_called_once_with(meta=meta, source="musicbrainz")
# 音乐不再旁路辅助识别选择流程,原生识别带共享元数据与剧集组参数
chain.recognize_media.assert_called_once()
call_kwargs = chain.recognize_media.call_args.kwargs
assert call_kwargs["meta"] is meta
assert call_kwargs["source"] == "musicbrainz"
assert result is expected
@@ -52,7 +56,10 @@ def test_media_chain_async_recognize_by_meta_routes_metamusic_to_module(monkeypa
return await chain.async_recognize_by_meta(meta, source="musicbrainz")
result = asyncio.run(runner())
chain.async_recognize_media.assert_awaited_once_with(meta=meta, source="musicbrainz")
chain.async_recognize_media.assert_awaited_once()
call_kwargs = chain.async_recognize_media.await_args.kwargs
assert call_kwargs["meta"] is meta
assert call_kwargs["source"] == "musicbrainz"
assert result is expected