diff --git a/app/actions/fetch_torrents.py b/app/actions/fetch_torrents.py index f303cc0b..b14486fc 100644 --- a/app/actions/fetch_torrents.py +++ b/app/actions/fetch_torrents.py @@ -62,7 +62,7 @@ class FetchTorrentsAction(BaseAction): params = FetchTorrentsParams(**params) if params.search_type == "keyword": # 按关键字搜索 - torrents = self.searchchain.search_by_title(title=params.name, sites=params.sites, cache_local=False) + torrents = self.searchchain.search_by_title(title=params.name, sites=params.sites) for torrent in torrents: if global_vars.is_workflow_stopped(workflow_id): break diff --git a/app/api/endpoints/search.py b/app/api/endpoints/search.py index aa88e218..d69d45a1 100644 --- a/app/api/endpoints/search.py +++ b/app/api/endpoints/search.py @@ -58,12 +58,12 @@ def search_by_id(mediaid: str, if doubaninfo: torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"), mtype=media_type, area=area, season=media_season, - sites=site_list) + sites=site_list, cache_local=True) else: return schemas.Response(success=False, message="未识别到豆瓣媒体信息") else: torrents = SearchChain().search_by_id(tmdbid=tmdbid, mtype=media_type, area=area, season=media_season, - sites=site_list) + sites=site_list, cache_local=True) elif mediaid.startswith("douban:"): doubanid = mediaid.replace("douban:", "") if settings.RECOGNIZE_SOURCE == "themoviedb": @@ -74,12 +74,12 @@ def search_by_id(mediaid: str, media_season = tmdbinfo.get('season') torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"), mtype=media_type, area=area, season=media_season, - sites=site_list) + sites=site_list, cache_local=True) else: return schemas.Response(success=False, message="未识别到TMDB媒体信息") else: torrents = SearchChain().search_by_id(doubanid=doubanid, mtype=media_type, area=area, season=media_season, - sites=site_list) + sites=site_list, cache_local=True) elif mediaid.startswith("bangumi:"): bangumiid = int(mediaid.replace("bangumi:", "")) if settings.RECOGNIZE_SOURCE == "themoviedb": @@ -88,7 +88,7 @@ def search_by_id(mediaid: str, if tmdbinfo: torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"), mtype=media_type, area=area, season=media_season, - sites=site_list) + sites=site_list, cache_local=True) else: return schemas.Response(success=False, message="未识别到TMDB媒体信息") else: @@ -97,7 +97,7 @@ def search_by_id(mediaid: str, if doubaninfo: torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"), mtype=media_type, area=area, season=media_season, - sites=site_list) + sites=site_list, cache_local=True) else: return schemas.Response(success=False, message="未识别到豆瓣媒体信息") else: @@ -113,11 +113,11 @@ def search_by_id(mediaid: str, if event_data.media_dict: search_id = event_data.media_dict.get("id") if event_data.convert_type == "themoviedb": - torrents = SearchChain().search_by_id(tmdbid=search_id, - mtype=media_type, area=area, season=media_season) + torrents = SearchChain().search_by_id(tmdbid=search_id, mtype=media_type, area=area, + season=media_season, cache_local=True) elif event_data.convert_type == "douban": - torrents = SearchChain().search_by_id(doubanid=search_id, - mtype=media_type, area=area, season=media_season) + torrents = SearchChain().search_by_id(doubanid=search_id, mtype=media_type, area=area, + season=media_season, cache_local=True) else: if not title: return schemas.Response(success=False, message="未知的媒体ID") @@ -133,11 +133,11 @@ def search_by_id(mediaid: str, mediainfo = MediaChain().recognize_media(meta=meta) if mediainfo: if settings.RECOGNIZE_SOURCE == "themoviedb": - torrents = SearchChain().search_by_id(tmdbid=mediainfo.tmdb_id, - mtype=media_type, area=area, season=media_season) + torrents = SearchChain().search_by_id(tmdbid=mediainfo.tmdb_id, mtype=media_type, area=area, + season=media_season, cache_local=True) else: - torrents = SearchChain().search_by_id(doubanid=mediainfo.douban_id, - mtype=media_type, area=area, season=media_season) + torrents = SearchChain().search_by_id(doubanid=mediainfo.douban_id, mtype=media_type, area=area, + season=media_season, cache_local=True) # 返回搜索结果 if not torrents: return schemas.Response(success=False, message="未搜索到任何资源") @@ -154,7 +154,8 @@ def search_by_title(keyword: Optional[str] = None, 根据名称模糊搜索站点资源,支持分页,关键词为空是返回首页资源 """ torrents = SearchChain().search_by_title(title=keyword, page=page, - sites=[int(site) for site in sites.split(",") if site] if sites else None) + sites=[int(site) for site in sites.split(",") if site] if sites else None, + cache_local=True) if not torrents: return schemas.Response(success=False, message="未搜索到任何资源") return schemas.Response(success=True, data=[torrent.to_dict() for torrent in torrents]) diff --git a/app/chain/search.py b/app/chain/search.py index a67da281..bc2f2191 100644 --- a/app/chain/search.py +++ b/app/chain/search.py @@ -36,7 +36,7 @@ class SearchChain(ChainBase): def search_by_id(self, tmdbid: Optional[int] = None, doubanid: Optional[str] = None, mtype: MediaType = None, area: Optional[str] = "title", season: Optional[int] = None, - sites: List[int] = None) -> List[Context]: + sites: List[int] = None, cache_local: bool = False) -> List[Context]: """ 根据TMDBID/豆瓣ID搜索资源,精确匹配,不过滤本地存在的资源 :param tmdbid: TMDB ID @@ -45,6 +45,7 @@ class SearchChain(ChainBase): :param area: 搜索范围,title or imdbid :param season: 季数 :param sites: 站点ID列表 + :param cache_local: 是否缓存到本地 """ mediainfo = self.recognize_media(tmdbid=tmdbid, doubanid=doubanid, mtype=mtype) if not mediainfo: @@ -59,12 +60,12 @@ class SearchChain(ChainBase): } results = self.process(mediainfo=mediainfo, sites=sites, area=area, no_exists=no_exists) # 保存到本地文件 - bytes_results = pickle.dumps(results) - self.save_cache(bytes_results, self.__result_temp_file) + if cache_local: + self.save_cache(pickle.dumps(results), self.__result_temp_file) return results def search_by_title(self, title: str, page: Optional[int] = 0, - sites: List[int] = None, cache_local: Optional[bool] = True) -> List[Context]: + sites: List[int] = None, cache_local: Optional[bool] = False) -> List[Context]: """ 根据标题搜索资源,不识别不过滤,直接返回站点内容 :param title: 标题,为空时返回所有站点首页内容 @@ -86,8 +87,7 @@ class SearchChain(ChainBase): torrent_info=torrent) for torrent in torrents] # 保存到本地文件 if cache_local: - bytes_results = pickle.dumps(contexts) - self.save_cache(bytes_results, self.__result_temp_file) + self.save_cache(pickle.dumps(contexts), self.__result_temp_file) return contexts def last_search_results(self) -> List[Context]: