Parent
#1 feat: 睡眠定时器 (Sleep Timer)
What to build
睡眠定时器 MVP 核心功能:用户可以从 PlayerBar 播放栏启动一个倒计时,到期后自动暂停播放。
端到端路径(全栈贯通):
-
主进程 — SleepTimerService:新建一个深模块类,封装定时器全部业务逻辑:
start(durationMinutes, action, fadeOut) — 启动倒计时
cancel() — 取消并清理
getStatus() — 返回 { isActive, remainingMs, action, fadeOutEnabled }
onTick / onComplete / onChange — 事件回调
- 内部使用
setInterval(1000) 驱动倒计时,到期时调用 AudioSession.pause()
- 并发安全:重复 start 覆盖前一个
-
主进程 — IPC 注册:新建 sleepTimerIpc.ts,注册 4 个通道:
sleepTimer:start — invoke,参数 { durationMinutes, action: 'pause', fadeOut: false }
sleepTimer:cancel — invoke
sleepTimer:getStatus — invoke,返回状态对象
sleepTimer:onTick — 事件通道,每秒推送剩余毫秒数
- 在
registerIpc.ts 中注册为 'sleepTimer' 步骤
-
Preload Bridge:在 window.echo 下新增 sleepTimer 命名空间,暴露上述 4 个方法
-
IPC 常量:在 src/shared/constants/ipcChannels.ts 中添加 4 个通道常量
-
渲染进程 — SleepTimerButton:PlayerTransport 组件中新增按钮:
- 空闲态:显示月亮图标(lucide-react 的
Moon 或 Timer)
- 运行态:显示 MM:SS 格式剩余时间
- 点击打开/关闭 Popover
-
渲染进程 — SleepTimerPopover:弹出面板包含:
- 标题"睡眠定时器"
- 6 个预设时长按钮:5 / 10 / 15 / 30 / 45 / 60 分钟
- 点击任一按钮立即启动定时器
- 运行中显示当前剩余时间 + 取消按钮
-
i18n:zh-CN 核心翻译 key(其他语言在 Slice 6 补全)
-
PlayerTransport 集成:在 MV 按钮右侧插入 SleepTimerButton,传入必要 props 和回调
Acceptance criteria
Blocked by
None - can start immediately
Parent
#1 feat: 睡眠定时器 (Sleep Timer)
What to build
睡眠定时器 MVP 核心功能:用户可以从 PlayerBar 播放栏启动一个倒计时,到期后自动暂停播放。
端到端路径(全栈贯通):
主进程 — SleepTimerService:新建一个深模块类,封装定时器全部业务逻辑:
start(durationMinutes, action, fadeOut)— 启动倒计时cancel()— 取消并清理getStatus()— 返回{ isActive, remainingMs, action, fadeOutEnabled }onTick/onComplete/onChange— 事件回调setInterval(1000)驱动倒计时,到期时调用AudioSession.pause()主进程 — IPC 注册:新建
sleepTimerIpc.ts,注册 4 个通道:sleepTimer:start— invoke,参数{ durationMinutes, action: 'pause', fadeOut: false }sleepTimer:cancel— invokesleepTimer:getStatus— invoke,返回状态对象sleepTimer:onTick— 事件通道,每秒推送剩余毫秒数registerIpc.ts中注册为'sleepTimer'步骤Preload Bridge:在
window.echo下新增sleepTimer命名空间,暴露上述 4 个方法IPC 常量:在
src/shared/constants/ipcChannels.ts中添加 4 个通道常量渲染进程 — SleepTimerButton:PlayerTransport 组件中新增按钮:
Moon或Timer)渲染进程 — SleepTimerPopover:弹出面板包含:
i18n:zh-CN 核心翻译 key(其他语言在 Slice 6 补全)
PlayerTransport 集成:在 MV 按钮右侧插入 SleepTimerButton,传入必要 props 和回调
Acceptance criteria
Blocked by
None - can start immediately