Skip to content

v0.2.0 · 云端备份(WebDAV)与插件卡列出插件本身

Latest

Choose a tag to compare

@Arlenman Arlenman released this 17 Oct 08:44
· 1 commit to main since this release

这一版解决什么

换机不再依赖同局域网。 v0.1.0 只能把包拷到本机目录或走 GitHub 私有仓库;这一版加了 WebDAV 云通道,绿联 NAS / 群晖 / Nextcloud / 坚果云都能用,国内直连、不需要代理。

新增

  • 云端备份(WebDAV):同步页签新增「云端(WebDAV)」卡片 —— 填地址、账号、口令、远端目录,「保存并测试连接」当场给结论;支持「传最新一份上去」「列出远端」「下载到本机」「删远端」,以及定时备份跑完自动上传。
  • 云端凭据独立存放:口令单独写在 ~/.dsh/backup-sync/cloud-credentials.json(权限 0600),不进设置文件;这个文件名同时在凭据黑名单里 —— 既不会被打进备份包,也不会被导入。
  • 导入页签能直接挑云端的包:「备份包」下拉现在分两组 —— 「本机」与「云端(WebDAV)」。云端每项标着「本机已有」或「本机没有」;选中云端那份点「分析差异」,本机没有的会自动从云端下载到本机备份目录(带 .sha256 的包下载后核对哈希),下完继续按原名走原有流程;本机已有的直接跳过下载。云端读不出来时只在页内给一条说明,不影响本机那些包照常导入。
  • 插件卡列出插件本身,不再只列三个清单文件:一行一个插件 —— 显示名(取插件自带 locale/zh.json 的 meta.title,和「设置 → 插件」里一模一样)、真正装上的版本、以及 已启用 / 仅依赖 / 未安装 / 内置 / 本地目录 徽标。悬停看说明、单击开详情弹窗、双击复制插件名。
  • 远端操作只认自己的包:只接受 dsh-sync-<时间戳>.tar.gz,其它名字(含 ../ 这类路径穿越)一律拒绝,且拒绝发生在发请求之前。

修复(8 处,全是真机跑出来的)

症状 根因
删掉最后一份包后界面说「远端还没有这个文件夹」 listRemote 把「远端目录不存在」误判成「目录是空的」
npm test 无输出无报错、永不退出 Node 默认把 test/**/*.js 全当测试文件,test/fake-webdav.js 被当测试跑起来常驻
在绿联 NAS 上「新建目录成功」之后 PUT 被拒 UGREEN 的 WebDAV 根是只读虚拟根,根下 MKCOL 回 405 但不真的建目录,被当成已存在放行
刚上传的包被判成「远端更新」 WebDAV 的 getlastmodified 只有秒级精度,加了 1 秒容差
每次展开插件卡都弹一条黄色警告 重装留下的 node_modules/xxx.old-<时间戳> 副本照样带 dsh 字段
好机器上常年挂「3 个声明了但没装上」 @deepseek-ai/* 内置 bundle 本就不在 profile 的 node_modules 里
凭据被拦下时只给一句文件名,看不懂为什么 告警文案没分类(凭据文件名 vs 可能藏凭据的文件)
云端卡片显示「上次测试 1792204738211」 直接渲染了宿主写的 epoch 毫秒,改为读 atLocal(缺了就按本机时区补,再没有就写「时间未知」)

安装 / 升级

dsh plugin --profile web add github:Arlenman/dsh-backup-sync#v0.2.0

桌面端:设置 → 插件 → 添加插件,填 github:Arlenman/dsh-backup-sync#v0.2.0。

包体 25 个文件 / 130,583 字节,无运行时依赖、无构建步骤(装完重启一次 DSH 生效)。

验收

项 结果
node --test test/*.test.js 529 / 529
npm run e2e:cloud(假 WebDAV 起独立进程) 65 / 65,整包 sha256 逐字节一致
npm run e2e:nas(真机绿联 NAS) 17 / 17
真机 UI 驱动(step17 / step18 / step19) 10 / 10 · 10 / 10 · 5 / 5

完整变更见 CHANGELOG.md。