diff --git a/app/chain/__init__.py b/app/chain/__init__.py index 4c28e8c2..f432416f 100644 --- a/app/chain/__init__.py +++ b/app/chain/__init__.py @@ -114,13 +114,15 @@ class ChainBase(metaclass=ABCMeta): def recognize_media(self, meta: MetaBase = None, mtype: MediaType = None, tmdbid: int = None, - doubanid: str = None) -> Optional[MediaInfo]: + doubanid: str = None, + cache: bool = True) -> Optional[MediaInfo]: """ 识别媒体信息 :param meta: 识别的元数据 :param mtype: 识别的媒体类型,与tmdbid配套 :param tmdbid: tmdbid :param doubanid: 豆瓣ID + :param cache: 是否使用缓存 :return: 识别的媒体信息,包括剧集信息 """ # 识别用名中含指定信息情形 @@ -131,7 +133,7 @@ class ChainBase(metaclass=ABCMeta): if not doubanid and hasattr(meta, "doubanid"): doubanid = meta.doubanid return self.run_module("recognize_media", meta=meta, mtype=mtype, - tmdbid=tmdbid, doubanid=doubanid) + tmdbid=tmdbid, doubanid=doubanid, cache=cache) def match_doubaninfo(self, name: str, imdbid: str = None, mtype: MediaType = None, year: str = None, season: int = None) -> Optional[dict]: diff --git a/app/chain/subscribe.py b/app/chain/subscribe.py index dba5314a..202a5061 100644 --- a/app/chain/subscribe.py +++ b/app/chain/subscribe.py @@ -71,11 +71,11 @@ class SubscribeChain(ChainBase): if tmdbinfo: mediainfo = MediaInfo(tmdb_info=tmdbinfo) else: - # 识别TMDB信息 - mediainfo = self.recognize_media(meta=metainfo, mtype=mtype, tmdbid=tmdbid) + # 识别TMDB信息,不使用缓存 + mediainfo = self.recognize_media(meta=metainfo, mtype=mtype, tmdbid=tmdbid, cache=False) else: - # 豆瓣识别模式 - mediainfo = self.recognize_media(meta=metainfo, mtype=mtype, doubanid=doubanid) + # 豆瓣识别模式,不使用缓存 + mediainfo = self.recognize_media(meta=metainfo, mtype=mtype, doubanid=doubanid, cache=False) if mediainfo: # 豆瓣标题处理 meta = MetaInfo(mediainfo.title) @@ -96,7 +96,8 @@ class SubscribeChain(ChainBase): # 补充媒体信息 mediainfo = self.recognize_media(mtype=mediainfo.type, tmdbid=mediainfo.tmdb_id, - doubanid=mediainfo.douban_id) + doubanid=mediainfo.douban_id, + cache=False) if not mediainfo: logger.error(f"媒体信息识别失败!") return None, "媒体信息识别失败" @@ -197,7 +198,8 @@ class SubscribeChain(ChainBase): # 识别媒体信息 mediainfo: MediaInfo = self.recognize_media(meta=meta, mtype=meta.type, tmdbid=subscribe.tmdbid, - doubanid=subscribe.doubanid) + doubanid=subscribe.doubanid, + cache=False) if not mediainfo: logger.warn( f'未识别到媒体信息,标题:{subscribe.name},tmdbid:{subscribe.tmdbid},doubanid:{subscribe.doubanid}') @@ -523,7 +525,8 @@ class SubscribeChain(ChainBase): # 识别媒体信息 mediainfo: MediaInfo = self.recognize_media(meta=meta, mtype=meta.type, tmdbid=subscribe.tmdbid, - doubanid=subscribe.doubanid) + doubanid=subscribe.doubanid, + cache=False) if not mediainfo: logger.warn( f'未识别到媒体信息,标题:{subscribe.name},tmdbid:{subscribe.tmdbid},doubanid:{subscribe.doubanid}') @@ -709,7 +712,9 @@ class SubscribeChain(ChainBase): meta.type = MediaType(subscribe.type) # 识别媒体信息 mediainfo: MediaInfo = self.recognize_media(meta=meta, mtype=meta.type, - tmdbid=subscribe.tmdbid, doubanid=subscribe.doubanid) + tmdbid=subscribe.tmdbid, + doubanid=subscribe.doubanid, + cache=False) if not mediainfo: logger.warn( f'未识别到媒体信息,标题:{subscribe.name},tmdbid:{subscribe.tmdbid},doubanid:{subscribe.doubanid}') diff --git a/app/modules/douban/__init__.py b/app/modules/douban/__init__.py index 226df545..9ac74071 100644 --- a/app/modules/douban/__init__.py +++ b/app/modules/douban/__init__.py @@ -35,12 +35,14 @@ class DoubanModule(_ModuleBase): def recognize_media(self, meta: MetaBase = None, mtype: MediaType = None, doubanid: str = None, + cache: bool = True, **kwargs) -> Optional[MediaInfo]: """ 识别媒体信息 :param meta: 识别的元数据 :param mtype: 识别的媒体类型,与doubanid配套 :param doubanid: 豆瓣ID + :param cache: 是否使用缓存 :return: 识别的媒体信息,包括剧集信息 """ if settings.RECOGNIZE_SOURCE != "douban": @@ -48,11 +50,17 @@ class DoubanModule(_ModuleBase): if not meta: cache_info = {} + elif not meta.name: + logger.error("识别媒体信息时未提供元数据名称") + return None else: if mtype: meta.type = mtype + if doubanid: + meta.doubanid = doubanid + # 读取缓存 cache_info = self.cache.get(meta) - if not cache_info: + if not cache_info or not cache: # 缓存没有或者强制不使用缓存 if doubanid: # 直接查询详情 @@ -80,7 +88,7 @@ class DoubanModule(_ModuleBase): logger.error("识别媒体信息时未提供元数据或豆瓣ID") return None # 保存到缓存 - if meta: + if meta and cache: self.cache.update(meta, info) else: # 使用缓存信息 diff --git a/app/modules/douban/douban_cache.py b/app/modules/douban/douban_cache.py index eb09c061..63e3d30a 100644 --- a/app/modules/douban/douban_cache.py +++ b/app/modules/douban/douban_cache.py @@ -51,7 +51,8 @@ class DoubanCache(metaclass=Singleton): """ 获取缓存KEY """ - return f"[{meta.type.value if meta.type else '未知'}]{meta.name}-{meta.year}-{meta.begin_season}" + return f"[{meta.type.value if meta.type else '未知'}]" \ + f"{meta.name or meta.doubanid}-{meta.year}-{meta.begin_season}" def get(self, meta: MetaBase): """ diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index f4d37709..dbca0e76 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -44,12 +44,14 @@ class TheMovieDbModule(_ModuleBase): def recognize_media(self, meta: MetaBase = None, mtype: MediaType = None, tmdbid: int = None, + cache: bool = True, **kwargs) -> Optional[MediaInfo]: """ 识别媒体信息 :param meta: 识别的元数据 :param mtype: 识别的媒体类型,与tmdbid配套 :param tmdbid: tmdbid + :param cache: 是否使用缓存 :return: 识别的媒体信息,包括剧集信息 """ if settings.RECOGNIZE_SOURCE != "themoviedb": @@ -57,11 +59,17 @@ class TheMovieDbModule(_ModuleBase): if not meta: cache_info = {} + elif not meta.name: + logger.warn("识别媒体信息时未提供元数据名称") + return None else: if mtype: meta.type = mtype + if tmdbid: + meta.tmdbid = tmdbid + # 读取缓存 cache_info = self.cache.get(meta) - if not cache_info: + if not cache_info or not cache: # 缓存没有或者强制不使用缓存 if tmdbid: # 直接查询详情 @@ -111,7 +119,7 @@ class TheMovieDbModule(_ModuleBase): logger.error("识别媒体信息时未提供元数据或tmdbid") return None # 保存到缓存 - if meta: + if meta and cache: self.cache.update(meta, info) else: # 使用缓存信息 diff --git a/app/modules/themoviedb/tmdb_cache.py b/app/modules/themoviedb/tmdb_cache.py index d7ea0f5d..1c1a0d76 100644 --- a/app/modules/themoviedb/tmdb_cache.py +++ b/app/modules/themoviedb/tmdb_cache.py @@ -50,7 +50,7 @@ class TmdbCache(metaclass=Singleton): """ 获取缓存KEY """ - return f"[{meta.type.value if meta.type else '未知'}]{meta.name}-{meta.year}-{meta.begin_season}" + return f"[{meta.type.value if meta.type else '未知'}]{meta.name or meta.tmdbid}-{meta.year}-{meta.begin_season}" def get(self, meta: MetaBase): """