Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions plugins.v2/subscribeassistantenhanced/docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,37 @@
- writer 只维护自己负责的状态事实,不跨领域推导业务流程。
- 证据、诊断、审计和快照模块只提供输入事实,不直接拥有订阅生命周期状态。

## 订阅管理策略

增强版默认管理所有订阅,各业务域是否运行仍由现有全局开关决定。订阅管理策略只描述例外,
用于缩小管理范围或覆盖插件创建洗版订阅时的有限参数;策略不得重新启用全局已经关闭的能力。

策略按用户配置顺序从上到下匹配,第一条命中后停止,未命中时继承全局配置。首期匹配条件限定为
稳定、可解释的订阅事实:媒体身份、媒体类型、季、剧集组、订阅用户、媒体类别和订阅模式。
单条订阅规则不能只保存数据库 ID,因为分集转全集、完成后重建等流程会创建新的订阅记录;
订阅身份应由媒体来源 ID、媒体类型、季和剧集组共同确定。

媒体类别优先使用订阅显式设置的 `media_category`,没有显式值时使用识别结果中的类别。
类别无法解析时按未知类别处理并输出可诊断结果,不能假定命中某条类别规则。

首期动作限定为:

- 完全排除订阅,不再进入增强版的业务处理;
- 排除指定业务域,包括待定、暂停、完结守卫、订阅补全、洗版、下载管理、订阅清理和识别增强;
- 覆盖插件创建的全集洗版订阅保存目录,目录只能选择主程序已经配置的下载目录根路径。

保存目录覆盖不负责拼接媒体类型或类别目录。主程序负责识别精确命中的下载目录根路径,并按该目录
已有的“按类型分类”和“按类别分类”设置生成最终路径;用户指定根路径下的自定义子目录时,
主程序必须将其视为完整路径,不能再次分类。

策略解析由纯逻辑的统一组件负责,返回命中规则、允许管理的业务域和有限覆盖项。事件入口、定时巡检
和洗版编排必须复用同一解析结果,禁止在各领域散落用户名、类别或订阅 ID 判断。配置界面应提供规则
排序、当前命中订阅预览以及订阅、类别和下载目录的受控选择,不提供任意脚本或通用字段修改能力。

订阅从受管理变为不受管理时,需要执行一次状态收敛:释放增强版持有的待定和暂停归属,移除插件
下载监控与观察状态,但不得恢复外部持有的暂停状态,也不得删除下载器任务、文件、种子或整理记录。
分集转全集或完成后重建产生新订阅后,需要按稳定订阅身份重新解析策略。

## 总体结构

```mermaid
Expand Down