fix(subscribe): update missing episode logic and return status

This commit is contained in:
InfinityPacer
2024-12-11 15:51:04 +08:00
parent f4dc7a133e
commit 2217583052
+28 -10
View File
@@ -327,7 +327,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
# 电视剧订阅处理缺失集 # 电视剧订阅处理缺失集
if meta.type == MediaType.TV: if meta.type == MediaType.TV:
# 实际缺失集与订阅开始结束集范围进行整合,同时剔除已下载的集数 # 实际缺失集与订阅开始结束集范围进行整合,同时剔除已下载的集数
no_exists = self.__get_subscribe_no_exits( exist_flag, no_exists = self.__get_subscribe_no_exits(
subscribe_name=f'{subscribe.name} {meta.season}', subscribe_name=f'{subscribe.name} {meta.season}',
no_exists=no_exists, no_exists=no_exists,
mediakey=mediakey, mediakey=mediakey,
@@ -336,6 +336,12 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
start_episode=subscribe.start_episode, start_episode=subscribe.start_episode,
downloaded_episodes=self.__get_downloaded_episodes(subscribe) downloaded_episodes=self.__get_downloaded_episodes(subscribe)
) )
# 已存在
if exist_flag:
logger.info(f'{mediainfo.title_year} 已全部下载')
self.finish_subscribe_or_not(subscribe=subscribe, meta=meta, mediainfo=mediainfo,
force=True)
continue
# 站点范围 # 站点范围
sites = self.get_sub_sites(subscribe) sites = self.get_sub_sites(subscribe)
@@ -623,7 +629,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
# 电视剧订阅 # 电视剧订阅
if meta.type == MediaType.TV: if meta.type == MediaType.TV:
# 整合实际缺失集与订阅开始集结束集,同时剔除已下载的集数 # 整合实际缺失集与订阅开始集结束集,同时剔除已下载的集数
no_exists = self.__get_subscribe_no_exits( exist_flag, no_exists = self.__get_subscribe_no_exits(
subscribe_name=f'{subscribe.name} {meta.season}', subscribe_name=f'{subscribe.name} {meta.season}',
no_exists=no_exists, no_exists=no_exists,
mediakey=mediakey, mediakey=mediakey,
@@ -632,6 +638,11 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
start_episode=subscribe.start_episode, start_episode=subscribe.start_episode,
downloaded_episodes=self.__get_downloaded_episodes(subscribe) downloaded_episodes=self.__get_downloaded_episodes(subscribe)
) )
# 已存在
if exist_flag:
logger.info(f'{mediainfo.title_year} 已全部下载')
self.finish_subscribe_or_not(subscribe=subscribe, meta=meta, mediainfo=mediainfo, force=True)
continue
# 遍历缓存种子 # 遍历缓存种子
_match_context = [] _match_context = []
@@ -1048,7 +1059,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
total_episode: int, total_episode: int,
start_episode: int, start_episode: int,
downloaded_episodes: List[int] = None downloaded_episodes: List[int] = None
) -> Dict[Union[int, str], Dict[int, NotExistMediaInfo]]: ) -> Tuple[bool, Dict[Union[int, str], Dict[int, NotExistMediaInfo]]]:
""" """
根据订阅开始集数和总集数,结合TMDB信息计算当前订阅的缺失集数 根据订阅开始集数和总集数,结合TMDB信息计算当前订阅的缺失集数
:param subscribe_name: 订阅名称 :param subscribe_name: 订阅名称
@@ -1061,7 +1072,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
""" """
# 使用订阅的总集数和开始集数替换no_exists # 使用订阅的总集数和开始集数替换no_exists
if not no_exists or not no_exists.get(mediakey): if not no_exists or not no_exists.get(mediakey):
return no_exists return False, no_exists
no_exists_item = no_exists.get(mediakey) no_exists_item = no_exists.get(mediakey)
if total_episode or start_episode: if total_episode or start_episode:
logger.info(f'订阅 {subscribe_name} 设定的开始集数:{start_episode}、总集数:{total_episode}') logger.info(f'订阅 {subscribe_name} 设定的开始集数:{start_episode}、总集数:{total_episode}')
@@ -1086,7 +1097,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
if not start_episode \ if not start_episode \
and not total_episode: and not total_episode:
# 无需调整 # 无需调整
return no_exists return False, no_exists
if not start_episode: if not start_episode:
# 没有自定义开始集 # 没有自定义开始集
start_episode = start start_episode = start
@@ -1121,25 +1132,32 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
episode_list = list(range(start, total + 1)) episode_list = list(range(start, total + 1))
# 更新剧集列表 # 更新剧集列表
episodes = list(set(episode_list).difference(set(downloaded_episodes))) episodes = list(set(episode_list).difference(set(downloaded_episodes)))
# 如果存在已下载剧集,则差集为空时,说明所有均已存在
if not episodes:
return True, {}
# 更新集合 # 更新集合
no_exists[mediakey][begin_season] = NotExistMediaInfo( no_exists[mediakey][begin_season] = NotExistMediaInfo(
season=begin_season, season=begin_season,
episodes=episodes, episodes=episodes,
total_episode=total, total_episode=total,
start_episode=start start_episode=start,
) )
else: else:
# 开始集数 # 开始集数
start = start_episode or 1 start = start_episode or 1
# 不存在的季 # 更新剧集列表
episodes = list(set(range(start, total_episode + 1)).difference(set(downloaded_episodes)))
# 如果存在已下载剧集,则差集为空时,说明所有均已存在
if not episodes:
return True, {}
no_exists[mediakey][begin_season] = NotExistMediaInfo( no_exists[mediakey][begin_season] = NotExistMediaInfo(
season=begin_season, season=begin_season,
episodes=list(set(range(start, total_episode + 1)).difference(set(downloaded_episodes))), episodes=episodes,
total_episode=total_episode, total_episode=total_episode,
start_episode=start start_episode=start,
) )
logger.info(f'订阅 {subscribe_name} 缺失剧集数更新为:{no_exists}') logger.info(f'订阅 {subscribe_name} 缺失剧集数更新为:{no_exists}')
return no_exists return False, no_exists
@eventmanager.register(EventType.SiteDeleted) @eventmanager.register(EventType.SiteDeleted)
def remove_site(self, event: Event): def remove_site(self, event: Event):