mirror of
https://github.com/panatgithub/AnkiHeadingSync.git
synced 2026-07-22 06:51:43 +00:00
2.2 KiB
2.2 KiB
模块 4 实现决策
本文锁定本轮“文件夹范围设置重做”为三模式 + 文件夹树勾选的具体实现决策。
1. 设置模型
PluginSettings新增scopeMode: "all" | "include" | "exclude"- 默认值固定为
"all" includeFolders / excludeFolders继续保留为持久化数组- 旧数据加载时不迁移、不清空旧数组,只是默认按
scopeMode = "all"生效
2. 范围语义
all:忽略includeFolders / excludeFolders,扫描全部 Markdown 文件include:只扫描includeFolders中的文件夹及其子文件夹exclude:扫描全部 Markdown 文件,但排除excludeFolders中的文件夹及其子文件夹- 不再保留“include 为空即全库”的隐式规则
3. 文件夹树接口
- 在
ManualSyncVaultGateway上新增只读listFolderTree() FolderTreeNode只包含:pathnamechildren
ObsidianVaultGateway直接从 vault 根目录递归收集真实文件夹- 返回根目录的子文件夹列表,根目录本身不作为可勾选节点
4. 设置页交互
- 范围设置使用一个固定模式下拉:
全部文件仅在指定文件夹排除指定文件夹
scopeMode = all时隐藏文件夹树scopeMode = include / exclude时展示树状复选框- 目录树按 Windows 风格三态规则运行:全选、半选、未选
5. 选择状态与保存格式
- 三态勾选与最小集合压缩放到独立纯函数中处理,而不是散落在 UI 事件回调里
- 保存时始终压缩为最小集合:
- 父目录完整选中则只保存父目录
- 只选部分子目录则只保存子目录
- 不支持在 UI 中手工输入任意路径
6. 当前文件同步门禁
- 当前文件同步仍保留命令入口
- 范围检查放到
ManualSyncService.syncFile()中,避免只有 UI 层知道范围规则 - 若当前文件不在范围内,抛出专用错误,由插件入口转成 info notice:
当前文件不在插件作用范围内
7. 范围控制
- 本模块只改“文件夹范围设置”相关能力
- 不改 deck、note type、字段映射设置
- 不引入单文件路径白名单/黑名单
- 不改 marker 写回与手动同步主流程