diff --git a/README.md b/README.md index 33e18da..2b8a8ff 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - 初始进入空闲:避免一启动就强行把你当作“正在工作” - 空闲 → 工作:当检测到你处于活动状态,开始累积本轮工作时长 -- 工作 → 空闲:当检测到你长时间未操作或处于“非工作占用”(例如看视频等),暂停本轮工作推进 +- 工作 → 空闲:当检测到你长时间未操作,暂停本轮工作推进 - 工作 → 休息:当本轮工作时长累计达到设定值,进入休息提醒并开始倒计时 - 休息 → 空闲:休息倒计时结束,提示“休息结束”,回到空闲等待下一次有效活动 @@ -29,24 +29,12 @@ - “工作时长”不是自然时间,而是“有效工作时间” - 你在活动状态时才累积 - 你离开电脑/长时间不操作时不会累积 - - 你处在明显的非工作占用时段(如看视频)不会累积 - 空闲时间很长时会重置本轮进度 - 设计目的:避免“离开一小时回来只剩 1 分钟就休息”的反直觉体验 - 直观理解:离开足够久就视为已经中断了一轮工作,回来从新的一轮开始更合理 - 休息倒计时以“秒级稳定推进”为目标 - 设计目的:让休息提示的倒计时更平滑、更可预期 -## 媒体播放检测(视频/音频) - -- 目标:当你在“播放视频/音频”时,倾向不推进工作计时,避免把被动观看算作连续高强度工作 -- 判定策略(由强到弱): - - 系统媒体会话(SMTC/GSMTC):当播放器/浏览器接入系统媒体控制时,可直接识别“播放/暂停” - - 音频会话峰值兜底:当系统媒体会话不可用时,通过默认音频设备的会话峰值判断是否正在输出声音 -- 响应延迟: - - 计时器自身按 1 秒节拍检查一次 - - 媒体状态会做短缓存刷新:播放中约 0.5 秒刷新、未播放约 1.2 秒刷新 - - 实际体验通常是“暂停后约 1 秒左右恢复计时” - ## 休息提醒(强提示的边界) - 休息阶段会出现遮罩式提醒,核心是“让你意识到现在该休息了” @@ -66,37 +54,43 @@ - 你在电脑前持续工作:按设定节奏进入休息提醒 - 你离开电脑一会儿再回来:这段时间不算作有效工作,避免“人在不在都算工作” -- 你在看视频/会议播放:倾向不推进工作计时,避免把“被动观看”算作高强度连续工作 - 你刚好在关键时刻被提醒:可以跳过本次休息,稍后再通过节奏回到下一轮 ## 运行逻辑(从用户视角) - 启动后读取上次的时长与偏好,进入后台常驻 - 当检测到用户处于活动状态时,进入“工作”并开始累积工作时长 -- 当检测到用户长时间未操作或处于“非工作占用”(例如看视频等)时,进入“空闲”,并按规则暂停/重置工作进度,避免把不在工作的时间算进“工作时长” +- 当检测到用户长时间未操作时,进入“空闲”,并按规则暂停/重置工作进度,避免把不在工作的时间算进“工作时长” - 当工作时长达到阈值时,进入“休息”,弹出遮罩式提醒并倒计时 - 休息倒计时结束后,关闭提醒并提示“休息结束”,回到下一轮 +## 配置与便携模式 + +- **配置文件策略**: + - 优先读取 `LocalAppData\TimerApp\settings.json` + - 若不存在,尝试读取程序运行目录下的 `settings.json`(兼容便携模式) +- **便携模式 (Portable Mode)**: + - **默认开启**:程序会在运行目录下读写 `settings.json`,且**不会**自动创建开始菜单/任务栏快捷方式。 + - **关闭方式**:设置环境变量 `TIMERAPP_PORTABLE=0` (或 `false`/`off`/`disable`)。 + - 关闭后,配置将强制存储在 `LocalAppData`。 + - 启动时会自动尝试修复/创建开始菜单与任务栏快捷方式(包含 AppUserModelID 支持,解决任务栏图标重叠问题)。 + ## 交互与体验取舍 - 托盘常驻:关闭窗口不等于退出,避免误关导致节奏中断;需要显式“退出”才结束进程 - 手动控制:支持调整工作/休息时长、暂停/恢复、重置一轮,用于临时打断或重新开始 - 休息阶段可跳过:允许用户在必要场景下结束本次休息并立刻回到下一轮 -## 设置与发布形态 - -- 将“工作/休息时长、空闲判定阈值、主题偏好”等作为可持久化设置,保证重启后仍保持用户习惯 -- 同时考虑“安装使用”和“解压即用”的便携形态:便携形态下更倾向把设置跟随程序一起携带,便于拷贝迁移 - ## 系统要求 -- Windows 10 2004(版本号 19041)及以上:媒体播放检测依赖系统媒体会话相关 API +- Windows 10 / 11 +- .NET Desktop Runtime 9.0 (若使用 Framework-dependent 发布版本) ## 编译与发布 - 开发环境要求 - Windows(WinForms 桌面程序) - - .NET SDK 9(项目目标框架:net9.0-windows10.0.19041.0) + - .NET SDK 9(项目目标框架:net9.0-windows) - 本地编译 - Debug: - `dotnet build` @@ -105,11 +99,11 @@ - 本地运行 - `dotnet run` - 便携版打包(生成 dist zip) - - PowerShell: + - 推荐使用 PowerShell 脚本一键发布: - `.\scripts\publish-portable.ps1` - - 自包含(目标机无需安装 .NET Desktop Runtime): + - **生成独立版 (Self-contained)**:目标机无需安装 .NET Runtime,但体积较大 - `.\scripts\publish-portable.ps1 -SelfContained $true` - - 指定架构(示例:x64): + - **指定架构**(如 x64): - `.\scripts\publish-portable.ps1 -Rid win-x64` - - CMD: - - `.\scripts\publish-portable.cmd` + - **开启裁剪 (Trim)**(实验性): + - `.\scripts\publish-portable.ps1 -Trim $true`