PipsqueakH
## 功能建议:WebDAV 同步支持远端删除同步到本地生词本 ### 使用场景 我目前使用 Saladict 收集生词,并通过 WebDAV(坚果云)同步生词本。 我的工作流大致是: 1. 平时使用 Saladict 收集生词 2. 通过 WebDAV 获取 `Saladict/notebook.json` 3. 使用 Python 脚本读取这些生词,并自动创建到 Mochi 等第三方记忆工具中 4. 创建成功后,希望脚本从 `notebook.json` 中删除已经处理过的生词 5. 希望 Saladict 下一次 WebDAV 同步时,也自动删除这些本地生词 这样可以实现类似: ```text Saladict ↓ WebDAV ↓ 外部脚本处理生词 ↓ 删除已处理词条 ↓ WebDAV ↓ Saladict 自动同步删除 ``` ### 目前的问题 我实际测试发现: 如果直接修改 WebDAV 上的 `notebook.json`: * 新增词条可以同步到 Saladict * 修改已有词条可以同步 * 但是如果从 `words` 数组中删除一个词条,该词条似乎不会从 Saladict 本地生词本中删除 例如本地原本有: ```json [ {"date": 1, "text": "apple"}, {"date": 2, "text": "banana"}, {"date": 3, "text": "orange"} ] ``` 如果 WebDAV 中修改成: ```json [ {"date": 1, "text": "apple"}, {"date": 3, "text": "orange"} ] ``` 即使更新了 `timestamp`,Saladict 中的 `banana` 仍然存在。 从目前的行为来看,WebDAV 下载似乎更接近于: ```text 新增 / 更新远端词条 ``` 而不是: ```text 让本地生词本与远端 notebook 完全一致 ``` ### 希望增加的功能 希望 WebDAV 同步可以支持一种“完整同步 / 镜像同步”模式: > 当远端 `notebook.json` 的 `timestamp` 更新,并被判断为较新的版本时,本地生词本可以与远端 `words` 完全同步。 也就是说: * 远端新增 → 本地新增 * 远端修改 → 本地修改 * **远端删除 → 本地删除** 这样 WebDAV 就可以真正作为一个双向同步接口,而不仅仅用于合并词条。 ### 建议 考虑到直接进行完整替换可能存在误删除风险,也许可以增加一个可选配置,例如: ```text WebDAV 同步模式 ○ 合并模式(当前行为) 只新增 / 更新,不删除本地词条 ○ 镜像模式 远端 notebook 较新时,使本地生词本与远端完全一致 ``` 或者提供一种明确的删除记录机制,例如在 WebDAV 数据中保存 tombstone / deleted IDs: ```json { "timestamp": 123456789, "words": [...], "deleted": [123, 456] } ``` 这样可以实现真正的双向同步,同时减少完整覆盖带来的冲突风险。 ### 为什么这个功能有价值 除了我的 Saladict → Mochi 自动化场景之外,这个功能也可以支持: * 第三方脚本管理 Saladict 生词本 * 在其他设备或工具中删除已经处理过的单词 * 与 Anki / Mochi / 自建词汇系统进行自动同步 * 自动整理或归档生词 * 将 WebDAV 作为真正的跨设备同步源 这样 Saladict 的 WebDAV 功能也可以更方便地作为开放的自动化接口使用。 感谢考虑这个功能。