Releases: Kim-Huang-JunKai/obsidian-secure-webdav-images
Releases · Kim-Huang-JunKai/obsidian-secure-webdav-images
v2.0.8
v2.0.7
Bug 修复
- 修复远端删除的空目录同步后本地被重建:v2.0.6 只修复了 remoteOnly 方向,遗漏了 localOnly 方向。修复后两个方向对称:之前同步过的空目录仅存于一侧时,从另一侧删除而非重建。
- 修复新本地目录仅创建父目录不创建自身:ensureRemoteDirectories 设计为文件创建父目录(总是去掉路径最后一段),导致 reconcileDirectories 中新建目录时目录本身未创建。
测试
- 新增 3 个多客户端目录同步测试(创建传播、A 删 B 随、B 删 A 随),全部通过
- 全部 24 个回归测试 + 9 个多客户端模拟测试通过
v2.0.6
Bug 修复
- 修复本地删除的空目录同步后被远端重建:reconcileDirectories 原来只会创建目录从不删除。修复后,之前同步过的目录若仅在远端存在,视为本地有意删除,执行远端删除而非本地重建。
- 同步状态消息合并目录删除统计:deletedRemoteDirectories 和 deletedLocalDirectories 现在纳入同步完成消息的删除计数。
v2.0.5
2.0.5 — 精简非核心功能,保留纯三向对比同步 + 图片转存
重大精简
- 删除 ~3210 行代码(main.js: 6880 → 3670 行,减少 47%),移除所有与核心同步和图片转存无关的功能
- 移除本地版本快照系统:
captureLocalVersionSnapshot、restoreLocalVersionEntry、VersionHistoryModal、版本索引文件等 - 移除冲突中心 UI:
SyncConflictCenterModal及相关命令,保留createLocalConflictCopy供三向对比产生冲突副本 - 移除本地同步日志:
appendLocalSyncLog、revealLocalSyncLogFile、sync-events.log文件 - 移除
handleFileOpen事件注册:不再跟踪文件打开/最近变更 - 移除设置 UI 中「版本与冲突」区域:4 个控件(版本开关、保留版本数、保留天数、日志条数)
- 移除 5 个命令:冲突中心、版本历史、版本回退、清理冲突备份、定位日志文件
- 删除第一份重复代码拷贝(~2361 行死代码,JS last-definition-wins)
保持不变
- 三向对比核心同步:
collectEntities→computeDecision→executeDecisions→persistPrevSyncRecords syncVaultContent作为唯一同步入口,runAutoSyncTick定时自动同步createLocalConflictCopy:三向对比 LOCAL_MODIFIED + REMOTE_MODIFIED 时产生.sync-conflict-*副本- 图片转码转存:
uploadImagesInNote、上传队列、SecureWebdavUploadQueueSupport
测试
- 全部 22 个回归测试通过
- 全部 6 个多客户端模拟测试通过
v2.0.3
重点修复
- 删除同步改为完全按 Remotely Save 的三方比较执行,移除自定义的删除宽限判断,统一使用“本地当前状态 + 远端当前状态 + 上次成功同步记录”的决策方式处理删除、重命名和移动。
- 修复本地删除后误删远端已修改文件的问题:当本地已删除、但远端在上次同步后又发生修改时,现在会按 Remotely Save 方案拉回远端版本,而不是继续删除远端。
- 修复旧同步索引升级后导致旧路径被错误恢复的问题:旧
syncIndex迁移到三方同步基线时,若历史签名不是标准mtime:size/mtime:size:hash,现在会回退到当前本地/远端状态补齐基线,避免创建、重命名、移动后的旧路径被误判并重新下载回来。
回归测试
- 新增并通过“本地删除但远端已修改时应拉回远端”的 Remotely Save 对齐回归测试。
- 修正重命名与双端修改场景的历史同步基线测试数据,确保回归测试使用真实可比较的签名。
npm test与node tests/multi-client-sim.cjs全部通过。
v2.0.2
修复内容:
- 修复首次成功同步后再次编辑被误判为冲突的问题,避免新建、重命名、移动后的笔记错误生成冲突副本。
- 修复 .sync-conflict-* 本地冲突备份在后续同步中被上传到 WebDAV 的问题。
- 补充对应回归测试,确认快速同步与后续同步行为正确。
v2.0.1 — 修复改名冲突文件
修复改名冲突文件
- 核心修复:
processPendingVaultRenames不再预上传改名文件到新远端路径,改为完全由三向对比决策矩阵处理- 旧路径:
LOCAL_DELETED + REMOTE_UNCHANGED → deleteRemote - 新路径:
LOCAL_NEW + REMOTE_DELETED → push
- 旧路径:
- 移除按需加载笔记模式(lazy-notes),~200 行
- 移除远端回收站(trash),~155 行
- 修复定时同步中的错误重抛
- 设置页 UI 文案更新
验证
- 19 个回归测试通过
- 6 个多客户端模拟测试通过
- 语法检查通过
v2.0.0 — Git 式增量版本同步
2.0.0 — Git 式增量版本同步
架构重构
- 统一同步路径:移除快速同步(远端事件流)与完整对账的双路径架构,所有同步入口改为调用单一
syncVaultContent方法。 - 三向对比决策矩阵:参照 remotely-save V3 算法,引入 IndexedDB 存储
prevSyncRecords,实现本地/远端/上次同步的三向对比,4×4 决策矩阵覆盖 16 种状态组合。 - 内容哈希身份:文件身份由 SHA-256 内容哈希确定,签名格式升级为
mtime:size:contentHash16。 - 纯三向对比删除检测:完全移除墓碑机制,删除检测依赖纯粹的三向对比,与 remotely-save V3 完全对齐。
删除的功能
- 移除远端事件流系统(~1000 行)
- 移除墓碑机制(~170 行)
- 移除快速同步 ribbon 图标、命令、设置项
新增
localdb.js:IndexedDB 封装- 6 个多客户端模拟测试
- 20 个回归测试全部通过
Breaking changes
- 旧远端
__secure-webdav-sync-events/和.__secure-webdav-deletions__/目录不再使用(需手动清理) - 首次启动 v2.0.0 时自动迁移旧 syncIndex → prevSyncRecords
🤖 Generated with Claude Code
v1.1.5
远端残留旧文件清理修复
- 修复全量同步时远端残留的旧路径文件不会被清理、反而被重新下载回本地的 bug。
- 在
reconcileRemoteAndLocal和reconcileRemoteOnlyFiles中增加陈旧副本检测:若远端文件的最后修改时间在上次同步之前、且本地已无对应文件,则判定为残留并删除,而不是恢复下载。 - 修复后,笔记从扁平目录迁移到子目录时,远端旧路径的残留文件会被自动清理,不再出现新旧路径各有一份副本的问题。
v1.1.4
1.1.4 更新说明
本次版本通过 TDD 回归测试全面验证了文件创建、更名、移动、目录迁移场景下的同步一致性。插件核心代码无变动。
同步一致性验证
通过新增回归测试(含快速同步、全量同步、自动同步三条路径),确认以下场景不会出现远端与本地不一致:
- 创建文件:新文件在全量/快速/自动同步后正确上传,syncIndex 准确记录
- 更名文件:旧远端路径正确删除(含 tombstone),新路径正确上传,连续更名的 rename chain 正确折叠
- 移动文件到新目录:全量/快速同步均正确删除旧远端、上传到新远端路径
- 移动目录(批量更名):多文件同时迁移时所有文件均正确到位
- 积压多操作:创建→更名→删除→再创建后全量同步,远端最终状态与本地一致
- 快慢同步一致性:快速同步后再全量同步不会重复上传,syncIndex 保持一致
- 自动同步:正确执行全量同步并发现新文件