镜像自地址
https://github.com/lhly/cloud-drive-renamer.git
已同步 2026-10-20 13:47:47 +08:00
新增 episodeExtract 规则类型,支持从文件名提取季集号并按模板生成新文件名。提取失败的文件会在预览中显示错误信息并自动跳过执行,避免误操作。
- 支持模板变量:{prefix} {season} {episode} {ext}
- 提供 helperPre/helperPost 锚点辅助提取
- 支持集数偏移和自定义前导零位数
- 更新规则工厂、类型定义和国际化配置
- 添加单元测试和设计文档
63 行
1.8 KiB
Markdown
63 行
1.8 KiB
Markdown
# 剧集提取规则设计(P1)
|
||
|
||
## 背景
|
||
当前规则体系缺少“从文件名提取季集号并标准化命名”的能力。用户希望支持模板化命名,并在提取失败时可视化失败项且自动跳过执行。
|
||
|
||
## 目标
|
||
- 新增 `episodeExtract` 规则类型
|
||
- 支持模板变量:`{prefix}` `{season}` `{episode}` `{ext}`
|
||
- 提取失败文件:预览标红 + 执行跳过
|
||
|
||
## 非目标
|
||
- 不实现复杂表达式/条件模板
|
||
- 不做自动 season 猜测
|
||
- 不改动执行器核心模型
|
||
|
||
## 参数设计
|
||
- `template: string`
|
||
- `prefix: string`
|
||
- `season?: number | string`(默认1)
|
||
- `offset?: number | string`(默认0)
|
||
- `leadingZeroCount?: number`(默认3, 1~10)
|
||
- `helperPre?: string`
|
||
- `helperPost?: string`
|
||
|
||
## 提取策略
|
||
优先级:
|
||
1. helper 锚点提取
|
||
2. `SxxExx` / `Season x Episode x`
|
||
3. `EPxx`
|
||
4. 通用数字兜底
|
||
|
||
## 生成策略
|
||
- `season` 输出两位(01~99)
|
||
- `episode` 应用 offset 后按前导零补齐
|
||
- 模板渲染后,如果模板未包含 `{ext}`,自动补原扩展名
|
||
|
||
## 失败策略
|
||
- 当某文件无法提取 episode 或 offset 后无效:
|
||
- 保持原名
|
||
- 记录错误信息到 `extractErrorMap`
|
||
- 预览展示红色错误
|
||
- 执行阶段由于“未变化”被自动跳过
|
||
|
||
## 接入点
|
||
- `src/types/rule.ts`
|
||
- `src/rules/episode-extract.ts`
|
||
- `src/rules/rule-factory.ts`
|
||
- `src/content/components/config-panel.ts`
|
||
- `src/content/components/file-selector-panel.ts`
|
||
- `src/locales/*`
|
||
|
||
## 风险与缓解
|
||
- 风险:规则参数输入不完整导致预览异常
|
||
- 缓解:沿用现有 `Invalid rule configuration` 分支,参数未就绪时不生成预览
|
||
- 风险:提取失败导致用户误解“未执行”
|
||
- 缓解:红色错误态 + 明确错误文案
|
||
|
||
## 验证
|
||
- `tests/unit/episode-extract-rule.test.ts`
|
||
- `tests/unit/rules.test.ts`
|
||
- `npm test -- --run`
|
||
- `npm run typecheck`
|