Repository navigation
dsh-notify 0.6.0
前台后台都会响提示音了。 之前提示音只在 DSH 有焦点时播放,窗口切到后台就只剩一个静音的系统通知。
改了什么
每条通知现在在两种状态下都响,但只响一次:
| 状态 | 谁发声 |
|---|---|
| 焦点在 DSH | 页面内的 <audio> 播放自带的 notify.wav(与之前一致) |
| 焦点不在 DSH | 页面保持安静,由系统原生通知发声 |
之所以不两边同时响,是为了避免同一条通知响两遍。
为什么不干脆让页面一直播? 浏览器会限流后台标签页的播放,后台标签页里的 Audio.play() 并不可靠——这正是把后台的声音交给系统通知的原因。
平台细节
- Windows:
dsh-toast.ps1现在往 toast XML 里写显式的
<audio src="ms-winsoundevent:Notification.Default" loop="false"/>,
不再依赖「没有<audio>元素时系统用默认音」这种隐式行为;
关闭「提示音」时写<audio silent="true"/>。 - macOS:
osascript的display notification加上sound name "default";
关闭「提示音」时省略该子句(不写就是静音)。
兜底
如果「系统通知」通道被关掉,后台会退回页面内发声(尽力而为,可能被浏览器限流)。
客户端在请求原生通知时带上 sound 字段;服务端未收到时默认按开启处理,旧客户端不受影响。
回归测试
新增三组断言,覆盖全部三条路径:
- 前台:不请求原生通知,页面内放音一次
- 后台:请求一次原生通知且
sound: true,页面内不放音 - 后台 + 系统通知关闭:退回页面内放音
测试里有个坑值得记:插件是在
focus/blur事件回调里读document.hasFocus()的,
所以测试必须真的派发这些事件,光改一个布尔变量不生效。
安装
# 从 npm
dsh plugin --profile desktop add @having5548/dsh-notify
# 或从本页附件
dsh plugin --profile desktop add having5548-dsh-notify-0.6.0.tgz安装后重启 DSH 生效。
新版桌面端的 profile 名是
desktop;旧版 Web 是web。
环境
- DSH ≥ 0.1.7-rc.2(已在 0.1.7-rc.2 / 0.2.0-rc.2 上核对)
- Windows 10+ / macOS
完整改动
见 7bd9ce7。
Assets
having5548-dsh-notify-0.6.0.tgz— 插件安装包- SHA256:
6AA6C5B81672AE7D90E3D41CECE4C4B5C68BBF7241C93FBDD2A0A9AA55872161