Files
TimerApp/README.md
2026-01-20 14:56:58 +08:00

110 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TimerApp
一个常驻后台的“工作/休息”计时提醒工具,核心目标是把休息从“靠自觉”变成“靠节奏”:工作一段时间后进入休息提示,休息结束再回到下一轮工作。
## 产品定位
- 适用人群:需要规律休息/护眼提醒的人,或希望把“休息”纳入工作节奏的人
- 目标:减少连续久坐、避免长时间盯屏,通过强提示把休息真正落地
- 使用方式:后台常驻 + 托盘入口,默认不打扰,只有到点进入休息时才强提醒
## 核心概念
- 一个周期:工作一段时间 → 休息一段时间 → 开始下一轮
- 三种状态:
- 空闲:系统判断你没有在“有效工作”,本轮工作时长不推进
- 工作:系统判断你在“有效工作”,本轮工作时长持续推进
- 休息:工作时长达到阈值后进入的强提醒阶段,休息倒计时结束后回到下一轮
## 核心逻辑(状态机)
- 初始进入空闲:避免一启动就强行把你当作“正在工作”
- 空闲 → 工作:当检测到你处于活动状态,开始累积本轮工作时长
- 工作 → 空闲:当检测到你长时间未操作,暂停本轮工作推进
- 工作 → 休息:当本轮工作时长累计达到设定值,进入休息提醒并开始倒计时
- 休息 → 空闲:休息倒计时结束,提示“休息结束”,回到空闲等待下一次有效活动
## 计时规则(核心策略)
- “工作时长”不是自然时间,而是“有效工作时间”
- 你在活动状态时才累积
- 你离开电脑/长时间不操作时不会累积
- 空闲时间很长时会重置本轮进度
- 设计目的:避免“离开一小时回来只剩 1 分钟就休息”的反直觉体验
- 直观理解:离开足够久就视为已经中断了一轮工作,回来从新的一轮开始更合理
- 休息倒计时以“秒级稳定推进”为目标
- 设计目的:让休息提示的倒计时更平滑、更可预期
## 休息提醒(强提示的边界)
- 休息阶段会出现遮罩式提醒,核心是“让你意识到现在该休息了”
- 休息阶段提供“跳过”
- 设计目的:保证强提示不与真实工作紧急程度冲突,必要时可快速回到工作
- 休息结束会给出结束提示,帮助你在不打开主界面的情况下也能知道已进入下一轮
## 使用说明(产品层)
- 设置工作/休息时长:决定每轮节奏的长度
- 暂停/恢复:临时不想被计时推进或进入休息时使用
- 重置:放弃当前进度,从新一轮开始
- 隐藏到托盘:把窗口收起但继续运行(避免误关)
- 退出:真正结束应用与提醒(需要显式操作)
## 常见场景
- 你在电脑前持续工作:按设定节奏进入休息提醒
- 你离开电脑一会儿再回来:这段时间不算作有效工作,避免“人在不在都算工作”
- 你刚好在关键时刻被提醒:可以跳过本次休息,稍后再通过节奏回到下一轮
## 运行逻辑(从用户视角)
- 启动后读取上次的时长与偏好,进入后台常驻
- 当检测到用户处于活动状态时,进入“工作”并开始累积工作时长
- 当检测到用户长时间未操作时,进入“空闲”,并按规则暂停/重置工作进度,避免把不在工作的时间算进“工作时长”
- 当工作时长达到阈值时,进入“休息”,弹出遮罩式提醒并倒计时
- 休息倒计时结束后,关闭提醒并提示“休息结束”,回到下一轮
## 配置与便携模式
- **配置文件策略**
- 优先读取 `LocalAppData\TimerApp\settings.json`
- 若不存在,尝试读取程序运行目录下的 `settings.json`(兼容便携模式)
- **便携模式 (Portable Mode)**
- **默认开启**:程序会在运行目录下读写 `settings.json`,且**不会**自动创建开始菜单/任务栏快捷方式。
- **关闭方式**:设置环境变量 `TIMERAPP_PORTABLE=0` (或 `false`/`off`/`disable`)。
- 关闭后,配置将强制存储在 `LocalAppData`
- 启动时会自动尝试修复/创建开始菜单与任务栏快捷方式(包含 AppUserModelID 支持,解决任务栏图标重叠问题)。
## 交互与体验取舍
- 托盘常驻:关闭窗口不等于退出,避免误关导致节奏中断;需要显式“退出”才结束进程
- 手动控制:支持调整工作/休息时长、暂停/恢复、重置一轮,用于临时打断或重新开始
- 休息阶段可跳过:允许用户在必要场景下结束本次休息并立刻回到下一轮
## 系统要求
- Windows 10 / 11
- .NET Desktop Runtime 9.0 (若使用 Framework-dependent 发布版本)
## 编译与发布
- 开发环境要求
- WindowsWinForms 桌面程序)
- .NET SDK 9项目目标框架net9.0-windows
- 本地编译
- Debug
- `dotnet build`
- Release
- `dotnet build -c Release`
- 本地运行
- `dotnet run`
- 便携版打包(生成 dist zip
- 推荐使用 PowerShell 脚本一键发布:
- `.\scripts\publish-portable.ps1`
- **生成独立版 (Self-contained)**:目标机无需安装 .NET Runtime但体积较大
- `.\scripts\publish-portable.ps1 -SelfContained $true`
- **指定架构**(如 x64
- `.\scripts\publish-portable.ps1 -Rid win-x64`
- **开启裁剪 (Trim)**(实验性):
- `.\scripts\publish-portable.ps1 -Trim $true`