Files
Time/README.md
2026-09-12 13:49:44 +08:00

4.0 KiB
Raw Blame History

Time

轻量 Electron 桌面应用:巨字时钟 + 多闹钟 + 番茄钟 + 通用倒计时,顶栏 + 4 个标签挤在同一个 ~440×400 小窗口里。

  • 巨字时钟 —— HH:MM:SS 24 小时制;首页另含日期、下一闹钟、番茄 / 倒计时状态、已启用闹钟数
  • 多闹钟 —— 支持 once / daily,列表按本地时刻升序;once 响过后自动停用,daily 保留并排到下一天同刻
  • 番茄钟 —— 25 / 5 / 15 三段式,每完成 4 轮 focus 后插一个长休;可暂停 / 继续 / 跳过 / 重置;底部展示今日完成数
  • 通用倒计时 —— HH:MM:SS 自由设置自动记住上次时长归零后弹“完成”按钮8 秒无操作自动收起
  • 6 套皮肤 —— Linear Dark、黄铜暗色、Solarized、Nord、Catppuccin Mocha、Vercel Light
  • 4 张浮窗 —— 时钟 / 番茄钟 / 闹钟 / 倒计时各自一个独立 BrowserWindow启动期预创建 + hide,点击瞬开;用户拖过的位置会记住
  • 系统集成 —— 顶栏4 个浮窗 toggle + 图钉置顶 + 齿轮)、托盘菜单、单实例锁、写盘失败 toast、主窗几何持久化、多显示器越界回退

提醒统一走系统通知(Notification API


快速开始

用户

  1. 下载安装包或便携版(见 打包
  2. 首次启动若被 Windows SmartScreen 拦截,点「更多信息 → 仍要运行」
  3. 顶栏右侧依次是 4 个浮窗 toggle、图钉置顶、齿轮设置主面板 4 个标签:时钟 / 番茄钟 / 倒计时 / 闹钟
  4. 浮窗右键 / 双击 / Esc / × / 触屏长按 都能关

开发者

npm install
npm run dev          # electron-vite + HMR
npm run typecheck    # node + web 两份 tsconfig 都过一遍
npm run build        # 构建产物到 out/
npm run package      # 打包 → release/NSIS 安装包 + portable 单文件)

需要 Node.js 20+。


键盘交互

范围 按键 行为
浮窗 Esc 关闭(实际是 hide预创建 BrowserWindow 不销毁)
主窗标签条 / 切换上一个 / 下一个标签
主窗标签条 Home / End 跳到第一个 / 最后一个标签
闹钟 / 倒计时编辑器 滚轮 / Shift + 滚轮 时间步进 ±1 / ±5

数据存储

Windows 上是 %APPDATA%/time/macOS / Linux 类似路径):

  • app-state.json —— 主状态(闹钟 / 番茄钟 / 倒计时 / 设置)
  • window-state.json —— 主窗位置、大小(同步 writeFileSync 落盘)

app-state.json 写盘走 300ms 防抖 + 合并同批次 + .tmp → rename 原子提交;版本不匹配或解析失败时复制为 .bak-v1 后回退默认状态。window-state.json 不参与备份。

落盘前会剥离 pomodoro.active / countdown.active —— 重启后回到 idle避免“旧 endsAt 已过期”的假象;闹钟的 active=enabled 完全持久化,重启后调度器按规则继续排程。


打包

npm run package

产物落在 release/

  • Time Setup <version>.exe —— NSIS 安装包(当前用户安装,可改安装目录)
  • Time-<version>-portable.exe —— 免安装单文件

productName = TimeappId = com.guan.time,当前版本 0.1.0。未配置代码签名与自动更新。


已知限制

  • 仅本地时区UI 仅中文
  • 未配置代码签名 —— 首次启动会被 SmartScreen 拦截
  • macOS / Linux 标题栏已分支macOS hiddenInset / Linux 系统 default),但仅在 Windows 上完整验证过打包
  • 提醒只走系统通知;若系统级关闭了通知,闹钟 / 番茄钟阶段切换 / 倒计时归零都不会响
  • 闹钟重复仅支持 once / daily;没有工作日 / 每周指定日
  • 闹钟仅按本地时刻升序排列,没有拖拽重排
  • 番茄钟持久化的 30 天完成历史(byDate)当前不展示在 UI 上;面板只显示今日完成数
  • 没有“全局重置应用”入口 —— 只能分别重置番茄钟 / 倒计时到 idle