From 002ebeaade66fb097424ec7477921b3831a7f24d Mon Sep 17 00:00:00 2001 From: Castell Date: Tue, 3 Mar 2026 00:18:04 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=AE=80=E5=8C=96=E5=AA=92?= =?UTF-8?q?=E4=BD=93=E8=AF=86=E5=88=AB=E6=A8=A1=E5=BC=8F=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=B8=AD=E7=9A=84=20if/else=20=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/download.py | 29 ++++--- app/chain/media.py | 144 +++++++++++++++++----------------- 2 files changed, 86 insertions(+), 87 deletions(-) diff --git a/app/api/endpoints/download.py b/app/api/endpoints/download.py index d933f69d..88657afe 100644 --- a/app/api/endpoints/download.py +++ b/app/api/endpoints/download.py @@ -79,23 +79,22 @@ def add( metainfo = MetaInfo(title=torrent_in.title, subtitle=torrent_in.description) # 媒体信息 mediainfo: MediaInfo = None - if settings.RECOGNIZE_PLUGIN_FIRST and eventmanager.check(ChainEventType.NameRecognize): - # 插件优先模式:优先使用辅助识别 - mediainfo = MediaChain().recognize_help(title=torrent_in.title, org_meta=metainfo) + plugin_available = eventmanager.check(ChainEventType.NameRecognize) + # 定义识别函数 + native_recognize = lambda: MediaChain().recognize_media(meta=metainfo, tmdbid=tmdbid, doubanid=doubanid) + plugin_recognize = 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 = MediaChain().recognize_media(meta=metainfo, tmdbid=tmdbid, doubanid=doubanid) - if not mediainfo: - return schemas.Response(success=False, message="无法识别媒体信息") + mediainfo = native_recognize() else: - # 标准模式:优先使用原生识别 - mediainfo = MediaChain().recognize_media(meta=metainfo, tmdbid=tmdbid, doubanid=doubanid) - if not mediainfo: - # 尝试使用辅助识别,如果有注册响应事件的话 - if eventmanager.check(ChainEventType.NameRecognize): - mediainfo = MediaChain().recognize_help(title=torrent_in.title, org_meta=metainfo) - if not mediainfo: - return schemas.Response(success=False, message="无法识别媒体信息") + # 原生优先 + mediainfo = native_recognize() + if not mediainfo and plugin_available: + mediainfo = plugin_recognize() + if not mediainfo: + return schemas.Response(success=False, message="无法识别媒体信息") # 种子信息 torrentinfo = TorrentInfo() torrentinfo.from_dict(torrent_in.model_dump()) diff --git a/app/chain/media.py b/app/chain/media.py index d9421019..d5a1c9bb 100644 --- a/app/chain/media.py +++ b/app/chain/media.py @@ -91,28 +91,27 @@ class MediaChain(ChainBase): """ title = metainfo.title mediainfo: MediaInfo = None - if settings.RECOGNIZE_PLUGIN_FIRST and eventmanager.check(ChainEventType.NameRecognize): - # 插件优先模式:优先使用辅助识别 + plugin_available = eventmanager.check(ChainEventType.NameRecognize) + # 定义识别函数 + native_recognize = lambda: self.recognize_media(meta=metainfo, episode_group=episode_group) + plugin_recognize = lambda: self.recognize_help(title=title, org_meta=metainfo) + if settings.RECOGNIZE_PLUGIN_FIRST and plugin_available: + # 插件优先 logger.info(f"插件优先模式已开启。请求辅助识别,标题:{title} ...") - mediainfo = self.recognize_help(title=title, org_meta=metainfo) + mediainfo = plugin_recognize() if not mediainfo: - # 尝试使用原生识别 logger.info(f'辅助识别未识别到 {title} 的媒体信息,尝试使用原生识别') - mediainfo = self.recognize_media(meta=metainfo, episode_group=episode_group) - if not mediainfo: - logger.warn(f'{title} 未识别到媒体信息') - return None + mediainfo = native_recognize() else: - # 标准模式:优先使用原生识别 - mediainfo = self.recognize_media(meta=metainfo, episode_group=episode_group) - if not mediainfo: - # 尝试使用辅助识别,如果有注册响应事件的话 - if eventmanager.check(ChainEventType.NameRecognize): - logger.info(f'请求辅助识别,标题:{title} ...') - mediainfo = self.recognize_help(title=title, org_meta=metainfo) - if not mediainfo: - logger.warn(f'{title} 未识别到媒体信息') - return None + # 原生优先 + logger.info(f"插件优先模式未开启。尝试原生识别,标题:{title} ...") + mediainfo = native_recognize() + if not mediainfo and plugin_available: + logger.info(f'原生识别未识别到 {title} 的媒体信息,尝试使用辅助识别') + mediainfo = plugin_recognize() + if not mediainfo: + logger.warn(f'{title} 未识别到媒体信息') + return None # 识别成功 logger.info(f'{title} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}') # 更新媒体图片 @@ -177,28 +176,27 @@ class MediaChain(ChainBase): # 元数据 file_meta = MetaInfoPath(file_path) mediainfo: MediaInfo = None - if settings.RECOGNIZE_PLUGIN_FIRST and eventmanager.check(ChainEventType.NameRecognize): - # 插件优先模式:优先使用辅助识别 + plugin_available = eventmanager.check(ChainEventType.NameRecognize) + # 定义识别函数 + native_recognize = lambda: self.recognize_media(meta=file_meta, episode_group=episode_group) + plugin_recognize = lambda: self.recognize_help(title=path, org_meta=file_meta) + if settings.RECOGNIZE_PLUGIN_FIRST and plugin_available: + # 插件优先 logger.info(f"插件优先模式已开启。请求辅助识别,标题:{file_path.name} ...") - mediainfo = self.recognize_help(title=path, org_meta=file_meta) + mediainfo = plugin_recognize() if not mediainfo: - # 尝试使用原生识别 logger.info(f'辅助识别未识别到 {path} 的媒体信息,尝试使用原生识别') - mediainfo = self.recognize_media(meta=file_meta, episode_group=episode_group) - if not mediainfo: - logger.warn(f'{path} 未识别到媒体信息') - return Context(meta_info=file_meta) + mediainfo = native_recognize() else: - # 标准模式:优先使用原生识别 - mediainfo = self.recognize_media(meta=file_meta, episode_group=episode_group) - if not mediainfo: - # 尝试使用辅助识别,如果有注册响应事件的话 - if eventmanager.check(ChainEventType.NameRecognize): - logger.info(f'请求辅助识别,标题:{file_path.name} ...') - mediainfo = self.recognize_help(title=path, org_meta=file_meta) - if not mediainfo: - logger.warn(f'{path} 未识别到媒体信息') - return Context(meta_info=file_meta) + # 原生优先 + logger.info(f"插件优先模式未开启。尝试原生识别,标题:{file_path.name} ...") + mediainfo = native_recognize() + if not mediainfo and plugin_available: + logger.info(f'原生识别未识别到 {path} 的媒体信息,尝试使用辅助识别') + mediainfo = plugin_recognize() + if not mediainfo: + logger.warn(f'{path} 未识别到媒体信息') + return Context(meta_info=file_meta) logger.info(f'{path} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}') # 更新媒体图片 self.obtain_images(mediainfo=mediainfo) @@ -853,28 +851,29 @@ class MediaChain(ChainBase): """ title = metainfo.title mediainfo: MediaInfo = None - if settings.RECOGNIZE_PLUGIN_FIRST and eventmanager.check(ChainEventType.NameRecognize): - # 插件优先模式:优先使用辅助识别 + plugin_available = eventmanager.check(ChainEventType.NameRecognize) + # 定义识别函数 + async def native_recognize(): + return await self.async_recognize_media(meta=metainfo, episode_group=episode_group) + async def plugin_recognize(): + return await self.async_recognize_help(title=title, org_meta=metainfo) + if settings.RECOGNIZE_PLUGIN_FIRST and plugin_available: + # 插件优先 logger.info(f"插件优先模式已开启。请求辅助识别,标题:{title} ...") - mediainfo = await self.async_recognize_help(title=title, org_meta=metainfo) + mediainfo = plugin_recognize() if not mediainfo: - # 尝试使用原生识别 logger.info(f'辅助识别未识别到 {title} 的媒体信息,尝试使用原生识别') - mediainfo = await self.async_recognize_media(meta=metainfo, episode_group=episode_group) - if not mediainfo: - logger.warn(f'{title} 未识别到媒体信息') - return None + mediainfo = native_recognize() else: - # 标准模式:优先使用原生识别 - mediainfo = await self.async_recognize_media(meta=metainfo, episode_group=episode_group) - if not mediainfo: - # 尝试使用辅助识别,如果有注册响应事件的话 - if eventmanager.check(ChainEventType.NameRecognize): - logger.info(f'请求辅助识别,标题:{title} ...') - mediainfo = await self.async_recognize_help(title=title, org_meta=metainfo) - if not mediainfo: - logger.warn(f'{title} 未识别到媒体信息') - return None + # 原生优先 + logger.info(f"插件优先模式未开启。尝试原生识别,标题:{title} ...") + mediainfo = native_recognize() + if not mediainfo and plugin_available: + logger.info(f'原生识别未识别到 {title} 的媒体信息,尝试使用辅助识别') + mediainfo = plugin_recognize() + if not mediainfo: + logger.warn(f'{title} 未识别到媒体信息') + return None # 识别成功 logger.info(f'{title} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}') # 更新媒体图片 @@ -939,28 +938,29 @@ class MediaChain(ChainBase): # 元数据 file_meta = MetaInfoPath(file_path) mediainfo: MediaInfo = None - if settings.RECOGNIZE_PLUGIN_FIRST and eventmanager.check(ChainEventType.NameRecognize): - # 插件优先模式:优先使用辅助识别 + plugin_available = eventmanager.check(ChainEventType.NameRecognize) + # 定义识别函数 + async def native_recognize(): + return await self.async_recognize_media(meta=file_meta, episode_group=episode_group) + async def plugin_recognize(): + return await self.async_recognize_help(title=path, org_meta=file_meta) + if settings.RECOGNIZE_PLUGIN_FIRST and plugin_available: + # 插件优先 logger.info(f"插件优先模式已开启。请求辅助识别,标题:{file_path.name} ...") - mediainfo = await self.async_recognize_help(title=path, org_meta=file_meta) + mediainfo = plugin_recognize() if not mediainfo: - # 尝试使用原生识别 logger.info(f'辅助识别未识别到 {path} 的媒体信息,尝试使用原生识别') - mediainfo = await self.async_recognize_media(meta=file_meta, episode_group=episode_group) - if not mediainfo: - logger.warn(f'{path} 未识别到媒体信息') - return Context(meta_info=file_meta) + mediainfo = native_recognize() else: - # 标准模式:优先使用原生识别 - mediainfo = await self.async_recognize_media(meta=file_meta, episode_group=episode_group) - if not mediainfo: - # 尝试使用辅助识别,如果有注册响应事件的话 - if eventmanager.check(ChainEventType.NameRecognize): - logger.info(f'请求辅助识别,标题:{file_path.name} ...') - mediainfo = await self.async_recognize_help(title=path, org_meta=file_meta) - if not mediainfo: - logger.warn(f'{path} 未识别到媒体信息') - return Context(meta_info=file_meta) + # 原生优先 + logger.info(f"插件优先模式未开启。尝试原生识别,标题:{file_path.name} ...") + mediainfo = native_recognize() + if not mediainfo and plugin_available: + logger.info(f'原生识别未识别到 {path} 的媒体信息,尝试使用辅助识别') + mediainfo = plugin_recognize() + if not mediainfo: + logger.warn(f'{path} 未识别到媒体信息') + return Context(meta_info=file_meta) logger.info(f'{path} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}') # 更新媒体图片 await self.async_obtain_images(mediainfo=mediainfo)