mirror of
https://github.com/d0zingcat/MoviePilot-Plugins.git
synced 2026-05-13 23:16:47 +00:00
fix: bugs
This commit is contained in:
@@ -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]:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user