fix: bugs

This commit is contained in:
wumode
2025-07-19 18:38:52 +08:00
parent 89adf2c9ac
commit 53ae912bfc
2 changed files with 22 additions and 11 deletions

View File

@@ -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]:

View File

@@ -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)