diff --git a/app/chain/download.py b/app/chain/download.py index 8ab32ad7..5176a7b1 100644 --- a/app/chain/download.py +++ b/app/chain/download.py @@ -146,7 +146,7 @@ class DownloadChain(ChainBase): def batch_download(self, contexts: List[Context], no_exists: Dict[int, Dict[int, NotExistMediaInfo]] = None, - userid: str = None) -> Tuple[List[Context], dict]: + userid: str = None) -> Tuple[List[Context], Dict[int, Dict[int, NotExistMediaInfo]]]: """ 根据缺失数据,自动种子列表中组合择优下载 :param contexts: 资源上下文列表 diff --git a/app/chain/subscribe.py b/app/chain/subscribe.py index c4b1862a..96caee5a 100644 --- a/app/chain/subscribe.py +++ b/app/chain/subscribe.py @@ -7,6 +7,7 @@ from app.chain.search import SearchChain from app.core.metainfo import MetaInfo from app.core.context import TorrentInfo, Context, MediaInfo from app.core.config import settings +from app.db.models.subscribe import Subscribe from app.db.subscribe_oper import SubscribeOper from app.helper.sites import SitesHelper from app.log import logger @@ -210,6 +211,8 @@ class SubscribeChain(ChainBase): matched_contexts.append(context) if not matched_contexts: logger.warn(f'订阅 {subscribe.name} 没有符合过滤条件的资源') + # 未搜索到资源,但本地缺失可能有变化,更新订阅剩余集数 + self.__upate_lack_episodes(lefts=no_exists, subscribe=subscribe, mediainfo=mediainfo) continue # 自动下载 downloads, lefts = self.downloadchain.batch_download(contexts=matched_contexts, @@ -224,6 +227,8 @@ class SubscribeChain(ChainBase): else: # 未完成下载 logger.info(f'{mediainfo.title_year} 未下载未完整,继续订阅 ...') + # 更新订阅剩余集数 + self.__upate_lack_episodes(lefts=lefts, subscribe=subscribe, mediainfo=mediainfo) def refresh(self): """ @@ -347,16 +352,27 @@ class SubscribeChain(ChainBase): image=mediainfo.get_message_image()) else: # 未完成下载,计算剩余集数 - left_seasons = lefts.get(mediainfo.tmdb_id) or [] - for season_info in left_seasons: - season = season_info.get('season') - if season == subscribe.season: - left_episodes = season_info.get('episodes') - logger.info(f'{mediainfo.title_year} 季 {season} 未下载完整,' - f'更新缺失集数为{len(left_episodes)} ...') - self.subscribehelper.update(subscribe.id, { - "lack_episode": len(left_episodes) - }) + self.__upate_lack_episodes(lefts=lefts, subscribe=subscribe, mediainfo=mediainfo) + else: + # 未搜索到资源,但本地缺失可能有变化,更新订阅剩余集数 + self.__upate_lack_episodes(lefts=no_exists, subscribe=subscribe, mediainfo=mediainfo) + + def __upate_lack_episodes(self, lefts: Dict[int, Dict[int, NotExistMediaInfo]], + subscribe: Subscribe, + mediainfo: MediaInfo): + """ + 更新订阅剩余集数 + """ + left_seasons = lefts.get(mediainfo.tmdb_id) or {} + for season_info in left_seasons.values(): + season = season_info.season + if season == subscribe.season: + left_episodes = season_info.episodes + logger.info(f'{mediainfo.title_year} 季 {season} 未搜索到资源,' + f'更新缺失集数为{len(left_episodes)} ...') + self.subscribehelper.update(subscribe.id, { + "lack_episode": len(left_episodes) + }) def remote_list(self, userid: Union[str, int] = None): """