feat(web): simplify subscription and manual download flows and sync UHD styles

This commit is contained in:
root committed 2026-10-13 14:37:03 +08:00
1 parent 27c0f27434
commit c3c4456913
33 files changed
+1083 -633

No files matched your search

+21 -28
View File
@@ -86,7 +86,7 @@
### 2.2 多版本与自动补全
- 每个版本目标一行,行尾:缺失数、在途数、"补全此版本"按钮、自动补全状态。
- **自动补全其他版本**:订阅级开关 `params.autoFill: "inherit" | "on" | "off"`,缺省 inherit → 取引用规则组/订阅默认值的 `autoFill`(系统缺省 on)。
- **自动补全其他版本**:订阅级开关 `params.autoFill: "inherit" | "on" | "off"`,缺省 inherit → 取主版本收录链的 `autoFill`(后者优先,系统缺省关闭)。
- on:非主版本目标像主版本一样独立评估、搜索、下载缺失单元。
- off:非主版本目标只登记缺失,不自动建计划;RSS 来的合格资源记为"延后(未开自动补全)";手动"补全此版本"或 Agent 调 `download.plan` 仍可下。
- 主版本 = 版本目标排序第一个(可在版本目标区拖动)。
@@ -94,33 +94,18 @@
## 3. 新建 / 编辑订阅表单
对话框两 Tab,同 MP 分"基础 / 进阶"。"订阅默认值"(按类型)用同一表单的默认模式,存规则页 §6.4。
对话框分「基础 / 高级」。订阅维护追踪范围、站点和下载安排,实际收录条件集中在详情的版本编辑器。
| 区 | 字段(界面) | MP 字段 | 我们存放 | 默认 / 显示条件 |
| --- | --- | --- | --- | --- |
| 基础 | 作品(搜索本地作品或 TMDB) | media_id / name | `mediaEntityId` / `titleQuery` | 必填 |
| | 类型 | type | `mediaKind` | 由作品带出 |
| | 季 / 季范围 | season | `seasonUnitId` + `seasonScope` | 剧集;缺省最新季 + 接续后续季(Agent 来源缺省仅本季) |
| | 开始集 / 结束集 | start_episode | `params.episodeRange {start,end}` | 剧集 |
| | 总集数(可锁定) | total_episode / manual_total_episode | `POST /episode-total` | 剧集;显示来源 |
| | 方式 | — | `mode` once / continuous | 电影缺省 once |
| | 优先级 | — | `priority` | tracking |
| | 站点范围 | sites | `params.siteIds` | 空 = 全部启用站点 |
| | 下载器 | downloader | `params.downloaderInstanceId` | 空 = 默认实例 |
| | 库根 | save_path(整理去向部分) | `params.libraryRootId`(新) | 空 = 按类型默认库根 |
| | 版本目标 | best_version / best_version_full | 子表:名称 + 规则组 + 升级(关 / 按集 / 整季 / 电影)+ 目标 pri | 缺省取订阅默认值 |
| 进阶 | 规则组 | filter_groups | `params.ruleGroupIds`(作用于全部版本目标)+ 版本目标 `rule_group_ids` | 空 = 订阅默认组 |
| | 包含 / 排除 | include / exclude | 订阅私有规则组(`scope.subscriptionId`,不在列表页显示) | 正则白名单校验 |
| | 分辨率 / 来源 / 特效 | resolution / quality / effect | 同上,写进私有规则组 hard | |
| | 搜索关键词 | keyword | `params.keywords[]`(新,追加到标题/别名检索词) | |
| | 主动搜索间隔 | —(全局) | `params.searchIntervalHours` | 24;0 = 关 |
| | 自动补全 / 补全预算 | — | `params.autoFill`、`params.fillBudget` | inherit |
| | 截止时间 | — | `params.stopAfter` | |
| | 下载保存路径 | save_path | `params.downloadSavePath`(新,P2) | 空 = 实例默认 |
| 不做 | 剧集组 episode_group | | P2(需 TMDB episode group 适配) | |
| | ImdbID 搜索 search_imdbid | | P2 `params.searchByImdb` | |
| | 自定义类别 media_category | | 用命名模板 `category` | |
| | 识别词 custom_words | | 放身份层(实体别名/集偏移),表单给链接 | |
| 入口 | 配置 | 生效范围 |
| --- | --- | --- |
| 新建订阅 · 基础 | 作品、方式、季范围与集范围、总集数、站点、下载器、媒体库目录、保存路径 | 当前订阅 |
| 新建订阅 · 收录版本 | 收录策略(缺省按分类、类型、全局匹配) | 只在创建时生成版本;模板更新不覆盖已有版本 |
| 新建订阅 · 收录版本 | 其他版本自动补全与预算 | 当前订阅;已有订阅只在详情调整 |
| 订阅 · 高级 | 包含/排除、搜索词、主动搜索周期、截止时间、排队优先级 | 当前订阅;共同过滤适用于全部版本 |
| 订阅详情 · 收录版本 | 主版本顺序、自动补全与预算 | 当前订阅及作品共用版本;排除其他订阅的版本 |
| 订阅详情 · 收录版本规则 | 分辨率等硬条件、软偏好、收录组合规则、洗版组合规则与方式、整季同套、完成条件 | 每个版本独立 |
取消订阅表单的统一分辨率、质量、特效、规则组与洗版编辑,不再向所有版本批量写入。旧 `params.ruleGroupIds/resolution/source/effect` 通过 API 继续兼容,普通保存原样保留;UHD/Atmos 私有过滤不因修改站点或周期而丢失。概览逐版本解析有效规则后合并展示,隐藏订阅私有组。自动补全继承主版本收录链的最后一个显式设置,缺省关闭;订阅显式开/关优先。
保存:创建时同实体同季已有 active 订阅 → 返回 409 并给"打开已有订阅"(差距 #18)。
@@ -199,7 +184,7 @@ DB:`subscription.last_progress_at`;`acquisition_slot.rule_group_ids uuid[]`、`a
- 版本目标 `rule_group_ids`(有序)+ 订阅 `params.ruleGroupIds`;评估时编译为 SlotSpec:hard 取交集;各组按 scope 过滤后**全部须命中某层**,pri 取**最后一个**带阶梯的组(同 MP),界面在该组上标"决定优先级"。
- 版本目标自身的 hard/soft 字段保留,视为一个匿名组排在最前。
- 默认值 Tab:按类型设 **订阅默认规则组**、**洗版默认规则组**(版本目标开升级时额外叠加)、**搜索默认规则组**(手动搜索与 Agent `release.search`)、订阅默认表单(§3 默认模式:站点、下载器、库根、版本目标模板、自动补全)。
- 默认值 Tab:按类型设 **订阅默认规则组**、**洗版默认规则组**(只在洗版阶段追加,版本目标可独立指定洗版规则组)、**搜索默认规则组**(手动搜索与 Agent `release.search`)、订阅默认表单(§3 默认模式:站点、下载器、库根、版本目标模板、自动补全)。
- 收录策略 Tab:现有策略工作区原样搬入(草案→预览→发布→回滚、newTitle、defaultSlots);`SlotTemplate` 增加 `ruleGroupIds`。
- Agent:能力 `rules.list` 读规则组;新增/修改走 `rules.propose`(origin=agent_inferred,生成待处理事项,批准后生效);命中有效抑制记录的指纹直接拒绝。对话中用户明确说的偏好 origin=conversation,直接生效并可撤销。
@@ -220,6 +205,14 @@ DB:`subscription.last_progress_at`;`acquisition_slot.rule_group_ids uuid[]`、`a
domain:`slot/rule-expr.ts`(词法/解析/求值/规范化输出)、`slot/atoms.ts`(内置原子表)、`SlotTierRule.expr?`;`mapping/slot.ts` 编译规则组 → SlotSpec。差分:`filter-cases.json#rules` 43 条全部重跑,目标 ✗ 从 15 降到 1(只剩音乐)。
## 6.8 分类策略与两阶段收录
分类仍由已有 TMDB 分类规则计算,收录策略通过 `scope.categories.movie / tv` 指定分类名称,`scope.mediaKinds` 区分电影、剧集、综艺。默认选择为显式订阅策略、分类策略、类型默认、全局默认;同层使用发布时间顺序。一个策略模板创建一个独立保留版本,分辨率范围是该版本的硬边界。单版本可允许过渡分辨率,多版本按模板分开;手动下载不持久化这些选择。
追更与补齐允许混合版本,洗版可配置 `upgradeThreshold.ruleGroupIds` 与 `consistency: season_release`。成套身份包含分辨率、来源、编码、规范化发布组、HDR、剪辑版,覆盖由实际季集账本决定,单集同样可以组成整季。同档对齐仅用于当前季目标且不得降来源或分辨率;洗版完成要求该目标规格覆盖范围内全部单元。规格与优先级随计划冻结,在途期间不切换套装。
Agent 补充事实后重新进入原规则。新增 `release_facts` 事项沿用现有决策、调查、持续授权和恢复验证,不增加另一套自动化流程。身份和其他来源到 TMDB 的季集映射继续使用已有长效规则及证据。
## 7. 实施拆分与估算
| 包 | 内容 | 估 | 依赖 |