From 53ae912bfc7fcac48dbaafd1c83ccd4f9290ddc1 Mon Sep 17 00:00:00 2001 From: wumode Date: Sat, 19 Jul 2025 18:38:52 +0800 Subject: [PATCH] fix: bugs --- plugins.v2/imdbsource/__init__.py | 28 ++++++++++++++++++++-------- plugins.v2/imdbsource/imdbhelper.py | 5 ++--- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/plugins.v2/imdbsource/__init__.py b/plugins.v2/imdbsource/__init__.py index 74f4726..83a4fa1 100644 --- a/plugins.v2/imdbsource/__init__.py +++ b/plugins.v2/imdbsource/__init__.py @@ -57,11 +57,8 @@ class ImdbSource(_PluginBase): _original_method = None def init_plugin(self, config: dict = None): - # monkey patching - if ChainBase.recognize_media.__name__ != 'patched_recognize_media': - self._original_method = ChainBase.recognize_media + plugin_instance = self - # 通过闭包捕获 plugin_instance def patched_recognize_media(chain_self, meta: MetaBase = None, mtype: Optional[MediaType] = None, tmdbid: Optional[int] = None, @@ -69,12 +66,21 @@ class ImdbSource(_PluginBase): bangumiid: Optional[int] = None, episode_group: Optional[str] = None, cache: bool = True): + # 调用原始方法 + if not plugin_instance._original_method: + return None result = plugin_instance._original_method(chain_self, meta, mtype, tmdbid, doubanid, bangumiid, episode_group, cache) if result is None and plugin_instance._enabled and plugin_instance._recognize_media: - logger.info(f"通过插件 {self.plugin_name} 执行:recognize_media ...") + logger.info(f"通过插件 {plugin_instance.plugin_name} 执行:recognize_media ...") return plugin_instance.recognize_media(meta, mtype) return result + # 给 patch 函数加唯一标记 + patched_recognize_media._patched_by = id(self) + # 保存原始方法 + if not (hasattr(ChainBase.recognize_media, "_patched_by") and + ChainBase.recognize_media._patched_by == id(self)): + self._original_method = getattr(ChainBase, "recognize_media", None) if config: self._enabled = config.get("enabled") @@ -94,10 +100,14 @@ class ImdbSource(_PluginBase): self._scheduler.add_job(self.__cache_staff_picks, trigger='date', run_date=None) if self._recognize_media and self._recognition_mode == 'auxiliary': # 替换 ChainBase.recognize_media - ChainBase.recognize_media = patched_recognize_media + if not (hasattr(ChainBase.recognize_media, "_patched_by") and + ChainBase.recognize_media._patched_by == id(self)): + ChainBase.recognize_media = patched_recognize_media else: # 恢复 ChainBase.recognize_media - if self._original_method and ChainBase.recognize_media.__name__ == 'patched_recognize_media': + if (hasattr(ChainBase.recognize_media, "_patched_by") and + ChainBase.recognize_media._patched_by == id(self) and + self._original_method): ChainBase.recognize_media = self._original_method else: self.stop_service() @@ -603,7 +613,9 @@ class ImdbSource(_PluginBase): """ 退出插件 """ - if ChainBase.recognize_media.__name__ == 'patched_recognize_media' and self._original_method: + if (hasattr(ChainBase.recognize_media, "_patched_by") and + ChainBase.recognize_media._patched_by == id(self) and + self._original_method): ChainBase.recognize_media = self._original_method def get_module(self) -> Dict[str, Any]: diff --git a/plugins.v2/imdbsource/imdbhelper.py b/plugins.v2/imdbsource/imdbhelper.py index 4583cac..9679b16 100644 --- a/plugins.v2/imdbsource/imdbhelper.py +++ b/plugins.v2/imdbsource/imdbhelper.py @@ -218,7 +218,7 @@ class ImdbHelper: return None @staticmethod - def __compare_names(file_name: str, names: Union[list|str]) -> bool: + def __compare_names(file_name: str, names: Union[list,str]) -> bool: """ 比较文件名是否匹配,忽略大小写和特殊字符 :param file_name: 识别的文件名或者种子名 @@ -506,7 +506,6 @@ class ImdbHelper: TV_MOVIE: Represents a TV movie title. SHORT: Represents a short title. VIDEO: Represents a video title. - VIDEO_GAME: Represents a video game title. :param start_year: The start year for filtering titles. :param end_year: The end year for filtering titles. :param country_code: The country code for filtering titles. @@ -727,7 +726,7 @@ class ImdbHelper: search_types = ['TV_SERIES', 'TV_MINI_SERIES', 'TV_SPECIAL'] res = self.advanced_search(query=name, media_types=search_types) if not res: - logger.debug("%s 未找到季%s相关信息!" % (name, season_number)) + logger.debug(f"{name} 未找到季{season_number}相关信息!") return None tvs = [r for r in res if r.get('id') and ImdbHelper.type_to_mtype(r.get('type')) == MediaType.TV] tvs = sorted(tvs, key=lambda x: x.get('startYear') or 0, reverse=True)