From f579461c12a21e65f7e8c68e3bb53dcf4ea9e2b5 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 10 Jun 2023 20:47:25 +0800 Subject: [PATCH] fix filter --- app/chain/__init__.py | 3 +-- app/chain/douban_sync.py | 4 +++- app/chain/search.py | 11 +++++++++-- app/chain/subscribe.py | 5 ++++- app/chain/user_message.py | 8 +------- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/app/chain/__init__.py b/app/chain/__init__.py index 42ce40d3..b99d0d6e 100644 --- a/app/chain/__init__.py +++ b/app/chain/__init__.py @@ -97,8 +97,7 @@ class ChainBase(AbstractSingleton, metaclass=Singleton): def filter_torrents(self, torrent_list: List[TorrentInfo], season_episodes: Dict[int, list] = None) -> List[TorrentInfo]: - return self.run_module("filter_torrents", torrent_list=torrent_list, - season_episodes=season_episodes) + return self.run_module("filter_torrents", torrent_list=torrent_list, season_episodes=season_episodes) def download(self, torrent_path: Path, cookie: str, episodes: Set[int] = None) -> Optional[Tuple[Optional[str], str]]: diff --git a/app/chain/douban_sync.py b/app/chain/douban_sync.py index 79bada54..b0d80ced 100644 --- a/app/chain/douban_sync.py +++ b/app/chain/douban_sync.py @@ -80,7 +80,9 @@ class DoubanSyncChain(ChainBase): continue logger.info(f'{mediainfo.get_title_string()} 媒体库中不存在,开始搜索 ...') # 搜索 - contexts = self.searchchain.process(meta=meta, mediainfo=mediainfo) + contexts = self.searchchain.process(meta=meta, + mediainfo=mediainfo, + no_exists=no_exists) if not contexts: logger.warn(f'{mediainfo.get_title_string()} 未搜索到资源') continue diff --git a/app/chain/search.py b/app/chain/search.py index 3e8e4a03..ce67a192 100644 --- a/app/chain/search.py +++ b/app/chain/search.py @@ -20,13 +20,13 @@ class SearchChain(ChainBase): def process(self, meta: MetaBase, mediainfo: MediaInfo, keyword: str = None, - season_episodes: Dict[int, list] = None) -> Optional[List[Context]]: + no_exists: Dict[int, List[dict]] = None) -> Optional[List[Context]]: """ 根据媒体信息,执行搜索 :param meta: 元数据 :param mediainfo: 媒体信息 :param keyword: 搜索关键词 - :param season_episodes: 媒体季度集数 + :param no_exists: 缺失的媒体信息 """ logger.info(f'开始搜索资源,关键词:{keyword or mediainfo.title} ...') # 未开启的站点不搜索 @@ -38,6 +38,13 @@ class SearchChain(ChainBase): if not indexer_sites: logger.warn('未开启任何有效站点,无法搜索资源') return [] + # 缺失的媒体信息 + if no_exists: + # 过滤剧集 + season_episodes = {info.get('season'): info.get('episodes') + for info in no_exists.get(mediainfo.tmdb_id)} + else: + season_episodes = None # 执行搜索 torrents: List[TorrentInfo] = self.search_torrents( mediainfo=mediainfo, diff --git a/app/chain/subscribe.py b/app/chain/subscribe.py index 1eaf0ef9..643139a1 100644 --- a/app/chain/subscribe.py +++ b/app/chain/subscribe.py @@ -113,7 +113,10 @@ class SubscribeChain(ChainBase): image=mediainfo.get_message_image()) continue # 搜索 - contexts = self.searchchain.process(meta=meta, mediainfo=mediainfo, keyword=subscribe.keyword) + contexts = self.searchchain.process(meta=meta, + mediainfo=mediainfo, + keyword=subscribe.keyword, + no_exists=no_exists) if not contexts: logger.warn(f'{subscribe.keyword or subscribe.name} 未搜索到资源') continue diff --git a/app/chain/user_message.py b/app/chain/user_message.py index baf37f5f..25ca790b 100644 --- a/app/chain/user_message.py +++ b/app/chain/user_message.py @@ -89,23 +89,17 @@ class UserMessageChain(ChainBase): return # 发送缺失的媒体信息 if no_exists: - # 过滤剧集 - season_episodes = {info.get('season'): info.get('episodes') - for info in no_exists.get(mediainfo.tmdb_id)} # 发送消息 messages = [f"第 {no_exist.get('season')} 季缺失 {len(no_exist.get('episodes'))} 集" for no_exist in no_exists.get(mediainfo.tmdb_id)] - logger.info(f"{mediainfo.get_title_string()}:" + "\n".join(messages)) self.post_message(title=f"{mediainfo.get_title_string()}:\n" + "\n".join(messages)) - else: - season_episodes = None # 搜索种子,过滤掉不需要的剧集,以便选择 logger.info(f"{mediainfo.get_title_string()} 媒体库中不存在,开始搜索 ...") self.post_message( title=f"开始搜索 {mediainfo.type.value} {mediainfo.get_title_string()} ...", userid=userid) contexts = self.searchchain.process(meta=self._current_meta, mediainfo=mediainfo, - season_episodes=season_episodes) + no_exists=no_exists) if not contexts: # 没有数据 self.post_message(title=f"{mediainfo.title} 未搜索到资源!", userid=userid)