mirror of
https://github.com/panatgithub/AnkiHeadingSync.git
synced 2026-07-22 06:51:43 +00:00
2.1 KiB
2.1 KiB
Deck Resolution Decisions
1. 实现入口
本轮继续以 manual-sync 主链路为实现入口:
CardIndexingService负责文件级显式 deck 提取RenderConfigService通过新的 deck resolution 服务解析最终 deckDiffPlannerService聚合结构化 warnings,并保持 update 判定不受 deck 变化影响AnkiBatchExecutor只在 add 路径使用 resolved deck,update 路径不做 changeDeckManualSyncService将 warnings 放入最终ManualSyncResult
2. 数据语义
- manual-sync 里的
deckHint继续表示“文件级显式 deck hint”,不混入 folder / default 结果 - 最终用于同步的 deck 只存在于
RenderPlan.deck/PlannedCard.deck/RenderedSyncCard.deck - 文件级 deck warnings 暂挂在 indexed card / state 上,最终在计划阶段去重汇总
3. 服务拆分
新增 4 个 deck 相关服务:
DeckNormalizationServiceDeckExtractionServiceFolderDeckMappingServiceDeckResolutionService
其中:
DeckExtractionService负责 YAML / 正文显式 deck 的提取与冲突 warningDeckResolutionService负责优先级决策:显式 deck > folder deck > default deck
4. 同步语义
- 新卡 add 必须使用 resolved deck
- 普通同步中,旧卡若 resolved deck 变化则执行
changeDeck renderConfigHash不包含 deck,deck 迁移由独立计划集合承载- rebuildIndex 仍不触发
changeDeck
5. 校验与错误
- deck normalization 输出空字符串时直接报错
- folder mapping 命中包含
::的文件夹名时按计划走硬失败,不静默回退 - YAML / 正文冲突不阻断同步,按 YAML 为准并产生 warning
- 多个正文声明不阻断同步,只取第一个并产生 warning
6. 结果透传
ManualSyncResult 新增结构化 warnings,用于:
- deck 冲突
- multiple body declarations
- fallback 到 default deck
UI 层可以再把这些 warning 转成 notice,但 notice 不是唯一载体。
7. UI 最小改动
设置页只做最小文案修正:
- 默认 deck 说明补充优先级语义
- 不新增复杂配置项