fix(subscribe): refine TV wash priority lifecycle (#6153)

This commit is contained in:
InfinityPacer
2026-07-20 14:02:19 +08:00
committed by GitHub
parent b042086efa
commit d9a42c672a
4 changed files with 411 additions and 128 deletions
+16 -11
View File
@@ -5,27 +5,32 @@ from pydantic import BaseModel, Field, ConfigDict, model_validator
from app.schemas.types import MediaType
def compute_subscribe_completed_episode(subscribe: Any) -> Optional[int]:
def compute_subscribe_completed_episode(subscribe: "Subscribe") -> Optional[int]:
"""
计算订阅"已完成"集数派生值,仅用于响应填充,不入库。
普通电视剧按 ``total_episode - lack_episode`` 计算;洗版电视剧按订阅目标范围内
priority==100 的分集数量,加上起始集前的逻辑完成集数计算。
普通电视剧按 ``total_episode - lack_episode`` 计算;分集洗版按订阅目标范围内
priority==100 的分集数量计算;全集洗版按整包准入基线是否达到 100 计算。
"""
total_episode = getattr(subscribe, "total_episode", None) or 0
if getattr(subscribe, "type", None) != MediaType.TV.value or not total_episode:
total_episode = subscribe.total_episode or 0
if subscribe.type != MediaType.TV.value or not total_episode:
return None
start_episode = getattr(subscribe, "start_episode", None) or 1
if not getattr(subscribe, "best_version", None):
lack = getattr(subscribe, "lack_episode", None) or 0
start_episode = subscribe.start_episode or 1
if not subscribe.best_version:
lack = subscribe.lack_episode or 0
return max(total_episode - lack, 0)
episode_priority = getattr(subscribe, "episode_priority", None) or {}
if not episode_priority and getattr(subscribe, "current_priority", None) is not None:
if subscribe.best_version_full:
completed_targets = max(total_episode - start_episode + 1, 0) \
if subscribe.current_priority == 100 else 0
return min(min(max(start_episode - 1, 0), total_episode) + completed_targets, total_episode)
episode_priority = subscribe.episode_priority or {}
if not episode_priority and subscribe.current_priority is not None:
# 兼容只有整体优先级的洗版快照,响应派生值需与链路侧按集口径保持一致。
episode_priority = {
str(episode): int(getattr(subscribe, "current_priority"))
str(episode): int(subscribe.current_priority)
for episode in range(start_episode, total_episode + 1)
}
priority_completed = sum(