mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 07:56:52 +08:00
fix 搜索缓存
This commit is contained in:
@@ -62,7 +62,7 @@ class FetchTorrentsAction(BaseAction):
|
|||||||
params = FetchTorrentsParams(**params)
|
params = FetchTorrentsParams(**params)
|
||||||
if params.search_type == "keyword":
|
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:
|
for torrent in torrents:
|
||||||
if global_vars.is_workflow_stopped(workflow_id):
|
if global_vars.is_workflow_stopped(workflow_id):
|
||||||
break
|
break
|
||||||
|
|||||||
+16
-15
@@ -58,12 +58,12 @@ def search_by_id(mediaid: str,
|
|||||||
if doubaninfo:
|
if doubaninfo:
|
||||||
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
||||||
mtype=media_type, area=area, season=media_season,
|
mtype=media_type, area=area, season=media_season,
|
||||||
sites=site_list)
|
sites=site_list, cache_local=True)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
||||||
else:
|
else:
|
||||||
torrents = SearchChain().search_by_id(tmdbid=tmdbid, mtype=media_type, area=area, season=media_season,
|
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:"):
|
elif mediaid.startswith("douban:"):
|
||||||
doubanid = mediaid.replace("douban:", "")
|
doubanid = mediaid.replace("douban:", "")
|
||||||
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
||||||
@@ -74,12 +74,12 @@ def search_by_id(mediaid: str,
|
|||||||
media_season = tmdbinfo.get('season')
|
media_season = tmdbinfo.get('season')
|
||||||
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
||||||
mtype=media_type, area=area, season=media_season,
|
mtype=media_type, area=area, season=media_season,
|
||||||
sites=site_list)
|
sites=site_list, cache_local=True)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
||||||
else:
|
else:
|
||||||
torrents = SearchChain().search_by_id(doubanid=doubanid, mtype=media_type, area=area, season=media_season,
|
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:"):
|
elif mediaid.startswith("bangumi:"):
|
||||||
bangumiid = int(mediaid.replace("bangumi:", ""))
|
bangumiid = int(mediaid.replace("bangumi:", ""))
|
||||||
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
||||||
@@ -88,7 +88,7 @@ def search_by_id(mediaid: str,
|
|||||||
if tmdbinfo:
|
if tmdbinfo:
|
||||||
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
||||||
mtype=media_type, area=area, season=media_season,
|
mtype=media_type, area=area, season=media_season,
|
||||||
sites=site_list)
|
sites=site_list, cache_local=True)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
||||||
else:
|
else:
|
||||||
@@ -97,7 +97,7 @@ def search_by_id(mediaid: str,
|
|||||||
if doubaninfo:
|
if doubaninfo:
|
||||||
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
||||||
mtype=media_type, area=area, season=media_season,
|
mtype=media_type, area=area, season=media_season,
|
||||||
sites=site_list)
|
sites=site_list, cache_local=True)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
||||||
else:
|
else:
|
||||||
@@ -113,11 +113,11 @@ def search_by_id(mediaid: str,
|
|||||||
if event_data.media_dict:
|
if event_data.media_dict:
|
||||||
search_id = event_data.media_dict.get("id")
|
search_id = event_data.media_dict.get("id")
|
||||||
if event_data.convert_type == "themoviedb":
|
if event_data.convert_type == "themoviedb":
|
||||||
torrents = SearchChain().search_by_id(tmdbid=search_id,
|
torrents = SearchChain().search_by_id(tmdbid=search_id, mtype=media_type, area=area,
|
||||||
mtype=media_type, area=area, season=media_season)
|
season=media_season, cache_local=True)
|
||||||
elif event_data.convert_type == "douban":
|
elif event_data.convert_type == "douban":
|
||||||
torrents = SearchChain().search_by_id(doubanid=search_id,
|
torrents = SearchChain().search_by_id(doubanid=search_id, mtype=media_type, area=area,
|
||||||
mtype=media_type, area=area, season=media_season)
|
season=media_season, cache_local=True)
|
||||||
else:
|
else:
|
||||||
if not title:
|
if not title:
|
||||||
return schemas.Response(success=False, message="未知的媒体ID")
|
return schemas.Response(success=False, message="未知的媒体ID")
|
||||||
@@ -133,11 +133,11 @@ def search_by_id(mediaid: str,
|
|||||||
mediainfo = MediaChain().recognize_media(meta=meta)
|
mediainfo = MediaChain().recognize_media(meta=meta)
|
||||||
if mediainfo:
|
if mediainfo:
|
||||||
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
||||||
torrents = SearchChain().search_by_id(tmdbid=mediainfo.tmdb_id,
|
torrents = SearchChain().search_by_id(tmdbid=mediainfo.tmdb_id, mtype=media_type, area=area,
|
||||||
mtype=media_type, area=area, season=media_season)
|
season=media_season, cache_local=True)
|
||||||
else:
|
else:
|
||||||
torrents = SearchChain().search_by_id(doubanid=mediainfo.douban_id,
|
torrents = SearchChain().search_by_id(doubanid=mediainfo.douban_id, mtype=media_type, area=area,
|
||||||
mtype=media_type, area=area, season=media_season)
|
season=media_season, cache_local=True)
|
||||||
# 返回搜索结果
|
# 返回搜索结果
|
||||||
if not torrents:
|
if not torrents:
|
||||||
return schemas.Response(success=False, message="未搜索到任何资源")
|
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,
|
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:
|
if not torrents:
|
||||||
return schemas.Response(success=False, message="未搜索到任何资源")
|
return schemas.Response(success=False, message="未搜索到任何资源")
|
||||||
return schemas.Response(success=True, data=[torrent.to_dict() for torrent in torrents])
|
return schemas.Response(success=True, data=[torrent.to_dict() for torrent in torrents])
|
||||||
|
|||||||
+6
-6
@@ -36,7 +36,7 @@ class SearchChain(ChainBase):
|
|||||||
|
|
||||||
def search_by_id(self, tmdbid: Optional[int] = None, doubanid: Optional[str] = None,
|
def search_by_id(self, tmdbid: Optional[int] = None, doubanid: Optional[str] = None,
|
||||||
mtype: MediaType = None, area: Optional[str] = "title", season: Optional[int] = 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搜索资源,精确匹配,不过滤本地存在的资源
|
根据TMDBID/豆瓣ID搜索资源,精确匹配,不过滤本地存在的资源
|
||||||
:param tmdbid: TMDB ID
|
:param tmdbid: TMDB ID
|
||||||
@@ -45,6 +45,7 @@ class SearchChain(ChainBase):
|
|||||||
:param area: 搜索范围,title or imdbid
|
:param area: 搜索范围,title or imdbid
|
||||||
:param season: 季数
|
:param season: 季数
|
||||||
:param sites: 站点ID列表
|
:param sites: 站点ID列表
|
||||||
|
:param cache_local: 是否缓存到本地
|
||||||
"""
|
"""
|
||||||
mediainfo = self.recognize_media(tmdbid=tmdbid, doubanid=doubanid, mtype=mtype)
|
mediainfo = self.recognize_media(tmdbid=tmdbid, doubanid=doubanid, mtype=mtype)
|
||||||
if not mediainfo:
|
if not mediainfo:
|
||||||
@@ -59,12 +60,12 @@ class SearchChain(ChainBase):
|
|||||||
}
|
}
|
||||||
results = self.process(mediainfo=mediainfo, sites=sites, area=area, no_exists=no_exists)
|
results = self.process(mediainfo=mediainfo, sites=sites, area=area, no_exists=no_exists)
|
||||||
# 保存到本地文件
|
# 保存到本地文件
|
||||||
bytes_results = pickle.dumps(results)
|
if cache_local:
|
||||||
self.save_cache(bytes_results, self.__result_temp_file)
|
self.save_cache(pickle.dumps(results), self.__result_temp_file)
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def search_by_title(self, title: str, page: Optional[int] = 0,
|
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: 标题,为空时返回所有站点首页内容
|
:param title: 标题,为空时返回所有站点首页内容
|
||||||
@@ -86,8 +87,7 @@ class SearchChain(ChainBase):
|
|||||||
torrent_info=torrent) for torrent in torrents]
|
torrent_info=torrent) for torrent in torrents]
|
||||||
# 保存到本地文件
|
# 保存到本地文件
|
||||||
if cache_local:
|
if cache_local:
|
||||||
bytes_results = pickle.dumps(contexts)
|
self.save_cache(pickle.dumps(contexts), self.__result_temp_file)
|
||||||
self.save_cache(bytes_results, self.__result_temp_file)
|
|
||||||
return contexts
|
return contexts
|
||||||
|
|
||||||
def last_search_results(self) -> List[Context]:
|
def last_search_results(self) -> List[Context]:
|
||||||
|
|||||||
Reference in New Issue
Block a user