fix: preserve subscribe season zero targets (#5983)

This commit is contained in:
InfinityPacer
2026-06-22 06:36:03 +08:00
committed by GitHub
parent 7358b4df14
commit 647c04956d
8 changed files with 364 additions and 35 deletions
+2 -1
View File
@@ -80,7 +80,8 @@ async def create_subscribe(
if subscribe_in.doubanid or subscribe_in.bangumiid:
meta = MetaInfo(subscribe_in.name)
subscribe_in.name = meta.name
subscribe_in.season = meta.begin_season
if subscribe_in.season is None:
subscribe_in.season = meta.begin_season
# 标题转换
if subscribe_in.name:
title = subscribe_in.name
+20 -24
View File
@@ -45,6 +45,17 @@ from app.schemas.types import MediaType, SystemConfigKey, MessageChannel, Notifi
subscribe_interaction_manager = SlashInteractionManager()
def build_subscribe_meta(subscribe: Subscribe) -> MetaBase:
"""
按订阅对象构造主程序链路共用的 MetaInfo。
"""
meta = MetaInfo(subscribe.name)
meta.year = subscribe.year
meta.begin_season = subscribe.season
meta.type = MediaType(subscribe.type)
return meta
class SubscribeChain(ChainBase):
"""
订阅管理处理链
@@ -1013,12 +1024,8 @@ class SubscribeChain(ChainBase):
time.sleep(sleep_time)
try:
logger.info(f'开始搜索订阅,标题:{subscribe.name} ...')
# 生成元数据
meta = MetaInfo(subscribe.name)
meta.year = subscribe.year
meta.begin_season = subscribe.season if subscribe.season is not None else None
try:
meta.type = MediaType(subscribe.type)
meta = build_subscribe_meta(subscribe)
except ValueError:
logger.error(f'订阅 {subscribe.name} 类型错误:{subscribe.type}')
continue
@@ -1408,12 +1415,8 @@ class SubscribeChain(ChainBase):
break
logger.info(f'开始匹配订阅,标题:{subscribe.name} ...')
mediakey = subscribe.tmdbid or subscribe.doubanid
# 生成元数据
meta = MetaInfo(subscribe.name)
meta.year = subscribe.year
meta.begin_season = subscribe.season or None
try:
meta.type = MediaType(subscribe.type)
meta = build_subscribe_meta(subscribe)
except ValueError:
logger.error(f'订阅 {subscribe.name} 类型错误:{subscribe.type}')
continue
@@ -1558,7 +1561,7 @@ class SubscribeChain(ChainBase):
logger.debug(f'{torrent_info.title} 有多季,不处理')
continue
# 比对季
if torrent_meta.begin_season:
if torrent_meta.begin_season is not None:
if meta.begin_season != torrent_meta.begin_season:
logger.debug(f'{torrent_info.title} 季不匹配')
continue
@@ -1706,12 +1709,8 @@ class SubscribeChain(ChainBase):
if global_vars.is_system_stopped:
break
logger.info(f'开始更新订阅元数据:{subscribe.name} ...')
# 生成元数据
meta = MetaInfo(subscribe.name)
meta.year = subscribe.year
meta.begin_season = subscribe.season or None
try:
meta.type = MediaType(subscribe.type)
meta = build_subscribe_meta(subscribe)
except ValueError:
logger.error(f'订阅 {subscribe.name} 类型错误:{subscribe.type}')
continue
@@ -1825,7 +1824,8 @@ class SubscribeChain(ChainBase):
if subscribe_in.doubanid or subscribe_in.bangumiid:
meta = MetaInfo(subscribe_in.name)
subscribe_in.name = meta.name
subscribe_in.season = meta.begin_season
if subscribe_in.season is None:
subscribe_in.season = meta.begin_season
# 标题转换
if subscribe_in.name:
title = subscribe_in.name
@@ -2553,7 +2553,7 @@ class SubscribeChain(ChainBase):
"""
if subscribe.type == MediaType.MOVIE.value:
return "电影"
season = subscribe.season or 1
season = subscribe.season if subscribe.season is not None else 1
if subscribe.total_episode:
lack_episode = (
subscribe.lack_episode
@@ -3056,12 +3056,8 @@ class SubscribeChain(ChainBase):
else:
episodes[0].download.append(file_info)
# 生成元数据
meta = MetaInfo(subscribe.name)
meta.year = subscribe.year
meta.begin_season = subscribe.season or None
try:
meta.type = MediaType(subscribe.type)
meta = build_subscribe_meta(subscribe)
except ValueError:
logger.error(f'订阅 {subscribe.name} 类型错误:{subscribe.type}')
return subscribe_info
@@ -3156,7 +3152,7 @@ class SubscribeChain(ChainBase):
if not subscribe.best_version:
totals = {}
if subscribe.season and effective_total_episode:
if subscribe.season is not None and effective_total_episode:
totals = {
subscribe.season: effective_total_episode
}
+7 -7
View File
@@ -179,20 +179,20 @@ def _build_meta_info(
if metainfo.get('doubanid'):
meta.doubanid = metainfo['doubanid']
if metainfo.get('type'):
meta.type = metainfo['type']
meta.type = MediaType(metainfo['type']) if isinstance(metainfo['type'], str) else metainfo['type']
if metainfo.get('episode_group'):
meta.episode_group = metainfo['episode_group']
if metainfo.get('begin_season'):
if metainfo.get('begin_season') is not None:
meta.begin_season = metainfo['begin_season']
if metainfo.get('end_season'):
if metainfo.get('end_season') is not None:
meta.end_season = metainfo['end_season']
if metainfo.get('total_season'):
if metainfo.get('total_season') is not None:
meta.total_season = metainfo['total_season']
if metainfo.get('begin_episode'):
if metainfo.get('begin_episode') is not None:
meta.begin_episode = metainfo['begin_episode']
if metainfo.get('end_episode'):
if metainfo.get('end_episode') is not None:
meta.end_episode = metainfo['end_episode']
if metainfo.get('total_episode'):
if metainfo.get('total_episode') is not None:
meta.total_episode = metainfo['total_episode']
return meta
+3 -3
View File
@@ -1050,7 +1050,7 @@ class DoubanModule(_ModuleBase):
continue
if mtype and mtype.value != type_name:
continue
if mtype and mtype == MediaType.TV and not season:
if mtype and mtype == MediaType.TV and season is None:
season = 1
item = item_obj.get("target")
title = item.get("title")
@@ -1059,9 +1059,9 @@ class DoubanModule(_ModuleBase):
meta = MetaInfo(title)
if type_name == MediaType.TV.value:
meta.type = MediaType.TV
meta.begin_season = meta.begin_season or 1
meta.begin_season = meta.begin_season if meta.begin_season is not None else 1
if meta.name == name \
and ((not season and not meta.begin_season) or meta.begin_season == season) \
and ((season is None and meta.begin_season is None) or meta.begin_season == season) \
and (not year or item.get('year') == year):
logger.info(f"{name} 匹配到豆瓣信息:{item.get('id')} {item.get('title')}")
return item