Repository navigation
Releases: gnk478/dsh-client-ui-wallpaper
Release list
1.1.8:社区市场注册 + 清单补齐 + 安装文档改标准路径
1.1.8 — 清单与安装体验(无代码改动)
- 进社区市场:向 awesome-dsh-plugin 提交条目 PR #6667(
category: theme),收录后可在 dsh-market 的 Themes 页一键安装 / 升级 - 清单补齐:
dsh.client.immediately: true(客户端插件随宿主启动即挂载,壁纸层与设置面板不再等懒加载);engines.dsh: ">=0.2.0-rc.2"(dshmarket 的manifestFacts()读engines.dsh) - README 安装段改为生态标准路径:桌面端用 App 内插件市场(
dsh plugin --profile desktop会被 Electron 独占管理拒绝);其他 profile 一行dsh plugin --profile web add dsh-client-ui-wallpaper;升级要写版本号(pnpm 11minimumReleaseAge=24h冷却);scripts/install.mjs降级为 fallback screenshots.json:市场按自己仓库里的这份清单取图,以后换图不用再提 PR
无代码改动:lib/client.js 与 lib/index.js 与 1.1.7 逐字节一致(sha256 3f609150… / 7d7567b9…)——已经在跑插件的用户不需要重新安装。
安装 / 升级
# 桌面 App:设置 → 插件市场(收录后)
# 其他 profile(web / 自建):
dsh plugin --profile web add dsh-client-ui-wallpaper@1.1.8
# 手动 fallback:
npm i dsh-client-ui-wallpaper@1.1.8
node node_modules/dsh-client-ui-wallpaper/scripts/install.mjs --profile desktop1.1.7:修复面板手选失效(作用域)+ 点击留痕
1.1.7 — 面板手选失效修复 + 点击留痕
修复
- 点缩略图完全没反应(1.1.6 回归):
modeAfterPick()被定义在apply()内部,而面板wallpaperSettingsElement()属于工厂作用域,onClick 闭包取不到它 —— 每次点击同步抛Uncaught ReferenceError: modeAfterPick is not defined,save()从未执行。现在函数提升回工厂作用域,轮换开着时手选仍然只改「当前这一张」。 - 手选优先显示:三处手选都带
pick: "image" | "video"(宿主校验/持久化,非法值 400),rotate 分支优先定位手选的那一类 —— 修掉「轮换开着时手选静态图被上次手选的视频盖住」;只影响首帧,之后照常轮换。
新增
- 点击留痕
panelPick:三处面板 onClick 在save()前调用notePick(),/_probe与/_client都能读到{ image, video, at, last }。「点了没反应」时可直接区分「点击没进来」还是「状态没生效」。
测试
node --test共 54 例(test/rotate.test.mjs+2:pick 压过遗留 video、pick 的素材不在库里也先画它)node scripts/check.mjs第 14 节 +2 项(三个入口的notePick、panelPick上报),并断言modeAfterPick必须留在工厂作用域(2 tabs)
安装
npm i dsh-client-ui-wallpaper@1.1.7
node node_modules/dsh-client-ui-wallpaper/scripts/install.mjs --profile desktop1.1.6:手选壁纸不再关闭自动轮换
1.1.6 — 手选壁纸不再关闭自动轮换
修复
- 面板里点静态图缩略图 / 动态壁纸缩略图 / 「▶ 动态」按钮 曾经硬编码
mode: "image"/mode: "video",等于顺手把自动轮换关掉(1.1.1–1.1.5 一直如此)。 - 现在统一走
modeAfterPick(cfg.mode, fallback):轮换开着时手选只改「当前这一张」,mode保持rotate。 - 选中的素材即使不在轮换列表里也先显示它:rotate 分支改用
locateIndex()定位起始项(显式选的动态版优先于静态图),未命中时index保持 -1、先画这一张,下一拍回到列表开头。 - 客户端
load()改用库内全量library校验config.image(不再限制在轮换池内),宿主lib/index.js同样改为current.images.includes(wanted)。
测试
node --test52 例(+6:test/rotate.test.mjs池外静态图 / 池外动态 / 动态优先,test/client.test.mjsmodeAfterPick3 例)。- 红绿验证:把测试指向 1.1.5 的源码时 4 例失败(缺
modeAfterPick+ 3 个池外用例实际值被换成轮换池首项),指向修复后源码 52/52 通过。 scripts/check.mjs新增第 14 节(13 项)。
安装 / 升级
npm i dsh-client-ui-wallpaper@1.1.6
node node_modules/dsh-client-ui-wallpaper/scripts/install.mjs --profile desktop校验
- registry
dist.shasumc780d4976d5c25d088ff00383c3ef0e9aa05f38a,tarball 内package/lib/client.jssha2564220e444…4228c(与仓库一致) - 可信发布(OIDC):provenance transparency log index 3092177718,2 条 attestations(npm publish v0.1 + SLSA provenance v1,builder
github-hosted)
1.1.5:选择器静默失效告警 + 客户端行为测试
1.1.5 — 选择器静默失效告警 + 客户端行为测试
新增:DSH 界面挂钩失效不再静默
- 客户端每 60 秒体检 8 组界面挂钩(输入框 / 侧栏 / 右栏 / 弹窗 / 气泡 / 工具栏 / 头像 / 代码块),每组带
selectors与「该界面是否在场」的anchor判据 - 带锚点的组连续两轮匹配为 0 才判定失效(
strikes >= 2),避开 React 渲染中途的假警报;恢复后清空告警记录,再次失效会重新告警 - 失效时
console.warn("[dsh-wallpaper] UI 选择器失效:…")+noteError("selector-missing", …),并把selectorHealth(at / checks / missing / detail / strikes)写进/wallpaper/_probe与/wallpaper/_client;detail给出每组的匹配数与命中的那条选择器 - 体检时机:
load()的每个 60 秒周期(在「配置未变就早退」之前),启动后 4 秒再补一轮
测试
- 新增
test/client.test.mjs(16 例,全部抽真实源码 + 替身):applyVars 3 / applyAutoInk 3 / classifyTile 2 / syncBlurFromState 4 / auditSelectors 4 test/rotate.test.mjs增加断言:每一轮load()都必须做一次选择器体检node --test共 46 例全绿;scripts/check.mjs增加第 13 节 13 项静态校验
安装
npm i dsh-client-ui-wallpaper@1.1.5
node node_modules/dsh-client-ui-wallpaper/scripts/install.mjs --profile desktopnpm: https://www.npmjs.com/package/dsh-client-ui-wallpaper/v/1.1.5(Trusted Publishing,带 provenance)
1.1.4
1.1.4
修:50MB 预热阈值此前形同虚设
1.1.2 引入的「大文件不预热」靠 HEAD 响应的 content-length 判断,但 GUI 走 dsh-app:// 协议拿不到该响应头——线上实测 prewarm.last.bytes 恒为 0、skipped 恒为 0,196MB 的视频照样被预热。
现在宿主在 /wallpaper/list.json 里直接返回 sizes(序列内每个素材 stat 出的字节数),客户端 60 秒一次的 load() 顺带刷新 sizeCache;只有查不到大小时才回退 HEAD(兼容老宿主)。
修复后线上 /_probe:prewarm.last.bytes = 16554373(真实字节数,不再是 0)。
测试
test/rotate.test.mjs加 3 例:list.json 大小 → 超阈值只计数不建节点、小素材照常预热、无大小时 HEAD 兜底test/host.test.mjs加 1 例:sizes来自宿主statnode --test共 30 例;scripts/check.mjs加第 12 节 6 项
升级
npm i dsh-client-ui-wallpaper@1.1.4
node node_modules/dsh-client-ui-wallpaper/scripts/install.mjs --profile desktop仍在使用 1.1.1 / 1.1.2 的话请直接升级:那两版的轮换模式壁纸整块不绘制(已在 1.1.3 修复)。
校验值:lib/client.js sha256 77956fd38523df3d31f02c289fbc48d6a6cd6f919d386ce858f73e76ca51b459,lib/index.js sha256 c1341cb8431156412e3054c56e74ded42248ce271ebd0418b8ec355c33bfd094(与 npm tarball 内一致)。
1.1.3
1.1.3
修:轮换模式壁纸整块空白(1.1.1 / 1.1.2 的严重缺陷)
1.1.1 引入轮换预热时,rotate 分支丢掉了一段初始化声明(var seconds = Number(config.rotateSeconds) 与 15 秒下限、var index = 0 与首帧定位循环),分支末尾也丢了 return;。结果 load() 每次一进分支就读未声明的 index 抛 ReferenceError,又被静默的 .catch(function () {}) 吞掉——面板一切正常,壁纸却再也不绘制,且没有任何线索。如果你用的是 1.1.1 或 1.1.2,请升级到本版。
修:加载失败不再静默
加载链上的异常现在会记进 loadFailure = { at, name, message },/wallpaper/_probe 与 /wallpaper/_client 都带,并立刻补发一次探针;下一次成功加载(appliedSignature = signature)后清空。
测试
- 新增
test/rotate.test.mjs(4 例):抽取真实load()源码,用替身fetch/ 计时器跑通「首帧只画一次并停在当前素材」「rotateSeconds 非法或缺省回落到 600 秒」「抛错写进 loadFailure」「下次成功清空 loadFailure」 - 指向坏的 1.1.2 源码时这 4 例全红,修复后
node --test共 26 例 scripts/check.mjs新增第 11 节 11 项静态校验(含「rotate 分支结束即 return」)
升级
npm i dsh-client-ui-wallpaper@1.1.3
node node_modules/dsh-client-ui-wallpaper/scripts/install.mjs --profile desktop校验值:lib/client.js sha256 c4f516afc9343b8e559ce4adf324a0a61d70da521854708f4627baaaad2cfcad(与 npm tarball 内一致)。
v1.1.2
v1.1.1
1.1.1
- 修:淡入前先等新壁纸首帧就绪(视频 loadeddata、图片 load/decode,READY_MS = 600 兜底),不再出现"过渡淡的是空节点、帧到了才硬切"
- 修:打断上一次淡入时旧节点以 opacity:1 卡在图层里(settle() 统一回收 + paintSeq 守卫)
- 轮换提前 8 秒预热下一项(preload = "auto"),预热节点不抢播
- /wallpaper/_probe 新增 ready 与 switches,可直接读出最近一次是 fade 还是 instant* 及原因
- 测试:crossfade 行为测试扩到 11 例,node --test 共 19 例;自检新增第 9 节 13 项
npm: https://www.npmjs.com/package/dsh-client-ui-wallpaper/v/1.1.1 (trusted publishing + provenance)
v1.1.0
dsh-client-ui-wallpaper 1.1.0
- 轮换交叉淡入淡出:换壁纸不再整层清空重建 —— 新节点插在常驻面纱之前,旧节点留在下层淡出 0.7s 后再回收;
data-dsh-wp-current标记当前节点,自动字色与探针都改按当前节点取色 - 尊重系统「减少动态效果」:
prefers-reduced-motion: reduce、窗口隐藏、首次绘制、重绘同一节点时直接替换,不做过渡 - 测试:新增
test/crossfade.test.mjs(从lib/client.js抽真实源码在最小 DOM 替身上跑 8 例);node --test共 16 例;scripts/check.mjs加第 8 节 10 项静态校验 - npm:
dsh-client-ui-wallpaper@1.1.0(17 files,带 provenance 的 OIDC 可信发布)
安装:npm i dsh-client-ui-wallpaper@1.1.0 → node node_modules/dsh-client-ui-wallpaper/scripts/install.mjs --profile desktop
1.0.4
1.0.4 — npm 包内自检与 npm test 可用
- npm 包里也能跑自检:1.0.3 的自检第 7 节会校验 workflow YAML,但 npm 包里没有
.github/,从装好的包里跑node scripts/check.mjs会报 3 项失败。现在缺.github/时跳过(只校验随包发布的examples/两份副本) test/打进包里:files增加test,装完包可直接npm test跑 8 个行为测试;prepublishOnly= 自检 + 行为测试
安装:npm i dsh-client-ui-wallpaper@1.0.4