主题
事件系统
所有事件同时派发为 fb2k:* DOM 事件(CustomEvent)。
播放事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| playback:trackChanged | 曲目切换 | |
| playback:stateChanged | 播放状态变化 | {state, position, duration} (state: "playing"/"paused"/"stopped") |
| playback:paused | 播放/暂停切换 | |
| playback:stopped | 播放停止 | {reason} (字符串: "user"/"eof"/"starting_another"/"shutting_down") |
| playback:seeked | 播放位置跳转 | |
| playback:volumeChanged | 音量变化 | |
| playback:time | 播放时间更新(~1秒/次,整数秒) | |
| playback:timeHighRes | 高精度时间更新(~100ms,小数秒,C++ 定时器轮询真实位置) | |
| playback:starting | 播放即将开始 | {command, paused} (command: "play"/"next"/"previous"/"random") |
| playback:dynamicInfo | 动态信息变化 | |
| playback:dynamicInfoTrack | 动态曲目信息变化 | |
| playback:edited | 当前曲目元数据被编辑 | |
| playback:orderChanged | 播放顺序变化 | |
| playback:queueChanged | 播放队列变化 | {origin} ("user_added" / "user_removed" / "playback_advance") |
| playback:itemPlayed | 曲目播放完成 | {title, artist, album, duration, path, absolutePath, ...} (完整 track info) |
| playback:stopAfterCurrentChanged | "当前曲目后停止"状态变化 | |
| playback:followCursorChanged | “播放跟随光标”变化 | |
| playback:cursorFollowChanged | “光标跟随播放”变化 |
播放列表事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| playlist:activated | 活动播放列表切换 | |
| playlist:created | 播放列表创建 | |
| playlist:removed | 播放列表删除 | |
| playlist:renamed | 播放列表重命名 | |
| playlist:reordered | 播放列表顺序变化 | |
| playlist:lockChanged | 播放列表锁定状态变化 | |
| playlist:defaultFormatChanged | 默认格式变化 | - |
| playlist:itemsAdded | 曲目添加 | |
| playlist:itemsRemoved | 曲目移除 | |
| playlist:itemsReordered | 曲目重新排序 | |
| playlist:itemsReplaced | 曲目替换 | |
| playlist:selectionChanged | 播放列表选中项变化 | |
| playlist:focusChanged | 焦点曲目变化 | |
| playlist:addComplete | 异步添加完成(广播到所有窗口) |
媒体库事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| library:itemsAdded | 媒体库新增项目 | |
| library:itemsRemoved | 媒体库移除项目 | |
| library:itemsModified | 媒体库项目修改 | |
| library:initialized | 媒体库初始化完成 |
元数据事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| metadb:changed | 评分/标签/统计变化 |
选择事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| selection:changed | 全局选择变化 (50ms 节流) |
音频事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| audio:spectrum | 频谱数据更新(需订阅) | |
| audio:dspPresetChanged | DSP 预设变化 | - |
| audio:outputDeviceChanged | 输出设备变化 | - |
| audio:replaygainModeChanged | ReplayGain 模式变化 | |
| audio:fullWaveformReady | 完整波形生成完成 | |
| audio:fullWaveformFailed | 完整波形生成失败 |
窗口事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| window:alwaysOnTopChanged | 置顶状态变化 | |
| window:stateChanged | 窗口状态变化 | 规范字段 {isMaximized, isMinimized}(运行时暂兼容 maximized / minimized) |
| window:popupOpened | 弹出窗口打开 | |
| window:popupClosed | 弹出窗口关闭 | |
| window:beforeClose | 窗口关闭前确认 | |
| window:message | 跨窗口消息接收 | |
| window:behaviorChanged | 弹窗行为策略变更 | |
| window:minimizeSuppressed | 抑制最小化(Win+D 策略) | |
| window:backdropStateChanged | 主窗口 / popup 的 DWM 激活/失焦策略生效 |
面板事件
| 事件 | 触发时机 |
|---|---|
| panel:initialized | 面板初始化完成 |
| panel:focus | 面板获得焦点 |
| panel:blur | 面板失去焦点 |
| panel:visibilityChanged | DUI 面板可见性变化 |
| panel:configChanged | 面板配置变化 |
UI 事件
| 事件 | 触发时机 |
|---|---|
| ui:coloursChanged | 颜色主题变化 |
| ui:fontChanged | 字体变化 |
| ui:menuItemClicked | 菜单项点击 |
| ui:toast | 通知消息 |
| system:themeChanged | 系统主题变化 |
应用生命周期事件
| 事件 | 触发时机 |
|---|---|
| app:beforeQuit | foobar2000 即将退出(fire-and-forget,前端可做快速清理) |
HTTP 事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| http:response | 异步 HTTP 请求完成 |
JIT Queue 事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| jitQueue:needNext | 后端请求下一首 | |
| jitQueue:trackChanged | 播放曲目变化 | |
| jitQueue:listExhausted | 缓冲区耗尽 | |
| jitQueue:error | 错误 |
键盘事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| keyboard:hotkey | 快捷键触发 |
跨窗口通信事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| port:connected | 命名通道连接 | |
| port:disconnected | 命名通道断开 | |
| port:message | 收到跨窗口消息 |
共享状态事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| state:changed | 共享状态变更 | |
| state:deleted | 共享状态删除 |
插件事件
| 事件 | 触发时机 | 数据 |
|---|---|---|
| plugin:registered | 外部插件注册 | |
| plugin:unregistered | 外部插件注销 | |
| api:registered | 外部 API 注册 | |
| api:unregistered | 外部 API 注销 |