refactor: 将 download.py 中重复的媒体识别模式选择逻辑封装进选择器函数

This commit is contained in:
Castell
2026-03-03 01:58:49 +08:00
parent b6b5d9f9c4
commit 28945ef153
2 changed files with 12 additions and 21 deletions
+6 -15
View File
@@ -78,21 +78,12 @@ def add(
# 元数据 # 元数据
metainfo = MetaInfo(title=torrent_in.title, subtitle=torrent_in.description) metainfo = MetaInfo(title=torrent_in.title, subtitle=torrent_in.description)
# 媒体信息 # 媒体信息
mediainfo: MediaInfo = None mediainfo = MediaChain().select_recognize_source(
plugin_available = eventmanager.check(ChainEventType.NameRecognize) log_name=torrent_in.title,
# 定义识别函数 log_context=torrent_in.title,
native_recognize = lambda: MediaChain().recognize_media(meta=metainfo, tmdbid=tmdbid, doubanid=doubanid) native_fn=lambda: MediaChain().recognize_media(meta=metainfo, tmdbid=tmdbid, doubanid=doubanid),
plugin_recognize = lambda: MediaChain().recognize_help(title=torrent_in.title, org_meta=metainfo) plugin_fn=lambda: MediaChain().recognize_help(title=torrent_in.title, org_meta=metainfo)
if settings.RECOGNIZE_PLUGIN_FIRST and plugin_available: )
# 插件优先
mediainfo = plugin_recognize()
if not mediainfo:
mediainfo = native_recognize()
else:
# 原生优先
mediainfo = native_recognize()
if not mediainfo and plugin_available:
mediainfo = plugin_recognize()
if not mediainfo: if not mediainfo:
return schemas.Response(success=False, message="无法识别媒体信息") return schemas.Response(success=False, message="无法识别媒体信息")
# 种子信息 # 种子信息
+6 -6
View File
@@ -85,7 +85,7 @@ class MediaChain(ChainBase):
""" """
return self.run_module("metadata_nfo", meta=meta, mediainfo=mediainfo, season=season, episode=episode) return self.run_module("metadata_nfo", meta=meta, mediainfo=mediainfo, season=season, episode=episode)
def _select_recognize_source(self, log_name: str, log_context: str, def select_recognize_source(self, log_name: str, log_context: str,
native_fn, plugin_fn) -> Optional[MediaInfo]: native_fn, plugin_fn) -> Optional[MediaInfo]:
""" """
选择识别模式,插件优先或原生优先 选择识别模式,插件优先或原生优先
@@ -118,7 +118,7 @@ class MediaChain(ChainBase):
""" """
title = metainfo.title title = metainfo.title
# 按 config 中设置的识别顺序识别 # 按 config 中设置的识别顺序识别
mediainfo = self._select_recognize_source( mediainfo = self.select_recognize_source(
log_name=title, log_name=title,
log_context=title, log_context=title,
native_fn=lambda: self.recognize_media(meta=metainfo, episode_group=episode_group), native_fn=lambda: self.recognize_media(meta=metainfo, episode_group=episode_group),
@@ -191,7 +191,7 @@ class MediaChain(ChainBase):
# 元数据 # 元数据
file_meta = MetaInfoPath(file_path) file_meta = MetaInfoPath(file_path)
# 按 config 中设置的识别顺序识别 # 按 config 中设置的识别顺序识别
mediainfo = self._select_recognize_source( mediainfo = self.select_recognize_source(
log_name=file_path.name, log_name=file_path.name,
log_context=path, log_context=path,
native_fn=lambda: self.recognize_media(meta=file_meta, episode_group=episode_group), native_fn=lambda: self.recognize_media(meta=file_meta, episode_group=episode_group),
@@ -847,7 +847,7 @@ class MediaChain(ChainBase):
logger.warn("无法识别元数据,跳过") logger.warn("无法识别元数据,跳过")
logger.info(f"{filepath.name} 刮削完成") logger.info(f"{filepath.name} 刮削完成")
async def _async_select_recognize_source(self, log_name: str, log_context: str, async def async_select_recognize_source(self, log_name: str, log_context: str,
native_fn, plugin_fn) -> Optional[MediaInfo]: native_fn, plugin_fn) -> Optional[MediaInfo]:
""" """
选择识别模式,插件优先或原生优先(异步版本) 选择识别模式,插件优先或原生优先(异步版本)
@@ -886,7 +886,7 @@ class MediaChain(ChainBase):
async def plugin_recognize(): async def plugin_recognize():
return await self.async_recognize_help(title=title, org_meta=metainfo) return await self.async_recognize_help(title=title, org_meta=metainfo)
# 按 config 中设置的识别顺序识别 # 按 config 中设置的识别顺序识别
mediainfo = await self._async_select_recognize_source( mediainfo = await self.async_select_recognize_source(
log_name=title, log_name=title,
log_context=title, log_context=title,
native_fn=native_recognize, native_fn=native_recognize,
@@ -964,7 +964,7 @@ class MediaChain(ChainBase):
async def plugin_recognize(): async def plugin_recognize():
return await self.async_recognize_help(title=path, org_meta=file_meta) return await self.async_recognize_help(title=path, org_meta=file_meta)
# 按 config 中设置的识别顺序识别 # 按 config 中设置的识别顺序识别
mediainfo = await self._async_select_recognize_source( mediainfo = await self.async_select_recognize_source(
log_name=file_path.name, log_name=file_path.name,
log_context=path, log_context=path,
native_fn=native_recognize, native_fn=native_recognize,