feat: add reminder scheduling and sound controls

This commit is contained in:
2026-06-01 21:01:11 +08:00
parent 4a7b739eea
commit c794e32023
36 changed files with 2494 additions and 35 deletions
@@ -30,6 +30,8 @@
- AI 请求取消和对话清空
- 角色文件夹导入和角色切换
- 删除用户导入角色
- 本地一次性提醒、提醒列表、取消提醒和到点通知
- 内置/用户提醒音效切换、导入、删除和试听
- Windows 打包脚本和 Inno Setup 安装器脚本
- Release exe 双击不弹控制台窗口
@@ -294,12 +296,12 @@ IP 定位隐私说明
阶段 5:语音对话 / 更复杂 Agent 能力
```
当前最推荐做:
当前结构收口和定时提醒已经进入实现阶段。下一步最推荐继续做:
```text
1. IntentRouter / CommandDispatcher
2. 定时提醒
3. 天气查询
1. 天气查询
2. 本地文件操作安全边界
3. 联网搜索
```
---
@@ -378,6 +380,20 @@ CommandDispatcher::dispatch(userText)
桌宠创建本地提醒,到点后气泡提示或托盘提示。
当前实现状态:
```text
已新增 src/reminder/ 模块
已支持一次性提醒解析、JSON 持久化、启动后加载、到点触发和状态标记
已支持聊天创建 / 查询 / 取消提醒
已支持设置页按状态查看提醒、取消 pending 提醒、清理已触发/已取消历史
已支持 reminder_default / reminder_soft 内置音效
已支持用户 wav 音效导入、删除、切换和试听
提醒触发时使用当前设置页选择的全局音效,ReminderItem.soundId 仅保留为历史兼容字段
已接入 Qt Multimedia / QSoundEffect 播放提醒音效
已预留 NotificationDispatcher,当前 Windows 仍由托盘通知承接
```
## 5.2 第一版范围
要做:
@@ -408,12 +424,18 @@ CommandDispatcher::dispatch(userText)
```text
src/reminder/
├── ReminderTypes.h
├── ReminderCommandHandler.h
├── ReminderCommandHandler.cpp
├── ReminderParser.h
├── ReminderParser.cpp
├── ReminderManager.h
├── ReminderManager.cpp
├── ReminderStore.h
── ReminderStore.cpp
── ReminderStore.cpp
├── ReminderSoundRepository.h
├── ReminderSoundRepository.cpp
├── ReminderSoundPlayer.h
└── ReminderSoundPlayer.cpp
```
## 5.4 数据结构建议
@@ -425,8 +447,9 @@ struct ReminderItem
QString title;
QString originalText;
QDateTime remindAt;
bool triggered = false;
ReminderStatus status = ReminderStatus::Pending;
QDateTime createdAt;
QString soundId; // 历史兼容字段,触发时不再读取
};
```
@@ -448,8 +471,9 @@ QStandardPaths::AppConfigLocation/reminders.json
"title": "提交作业",
"originalText": "晚上8点提醒我提交作业",
"remindAt": "2026-06-01T20:00:00",
"triggered": false,
"createdAt": "2026-06-01T15:20:00"
"status": "pending",
"createdAt": "2026-06-01T15:20:00",
"soundId": ""
}
]
}
@@ -475,13 +499,21 @@ reminders.broken.yyyyMMdd-HHmmss.json
下午3点
明天9点
明天上午10点
后天9点
今天下午3点
6月3日9点
6/3 09:00
下周一上午10点
10分钟后
半小时后
一个半小时后
一小时后
1小时后
两小时后
2小时后
```
如果规则解析失败,后续可以再接 AI 解析。
如果规则解析失败,后续可以再接 AI 解析。包含“每天 / 每周 / 每月 / 工作日 / 重复”等语义时,当前只返回“重复提醒尚未支持”,不创建一次性提醒。
## 5.7 AI 辅助解析的设计边界
@@ -524,9 +556,9 @@ userText
建议行为:
```text
桌宠可见:显示 ChatBubble + 切 talk 或 happy
桌宠隐藏:系统托盘通知
用户拖动中:不打断 drag,拖动结束后显示
桌宠可见:播放当前全局音效,显示 ChatBubble + 切 happy,无 happy 时回退 talk,不发 Windows 通知
桌宠隐藏:播放当前全局音效,触发 Windows 托盘通知,不在下次显示时补气泡
用户拖动中:播放当前全局音效,不打断 drag,拖动结束后显示气泡,不发 Windows 通知
```
提醒文案:
@@ -988,12 +1020,8 @@ CustomSearchProvider
## 9.2 第二步:定时提醒
```text
1. ReminderTypes
2. ReminderStore
3. ReminderParser
4. ReminderManager
5. 到点气泡和托盘通知
6. 设置页增加提醒列表,可后置
当前已落地一次性提醒、提醒列表、取消提醒、到点气泡/托盘通知和提醒音效管理。
后续可继续补确认/稍后提醒、重复提醒和跨平台通知实现。
```
## 9.3 第三步:天气查询
@@ -1066,8 +1094,8 @@ CustomSearchProvider
其中:
```text
定时提醒:最适合第一个落地
天气:第二个落地
定时提醒:已作为第一个工具能力落地
天气:建议第二个落地
本地文件操作:风险较高,第三个落地
联网搜索:通用能力,最后落地
```
+1 -1
View File
@@ -1408,7 +1408,7 @@ Windows 下不能只拷贝 exe。
1. 用户手动完成 Release 构建
2. 运行 tools/package_release.ps1,传入 QtDesktopPet.exe 路径
3. 脚本调用 windeployqt 收集 Qt 运行库
4. 脚本复制 resources/characters、resources/icons、LICENSE、README.md
4. 脚本复制 resources/characters、resources/icons、resources/sounds、LICENSE、README.md
5. 脚本生成 dist/QtDesktopPet-<version>-windows-x64.zip
6. 需要安装器时,脚本优先查找 D:\Inno Setup 7\ISCC.exe,并调用 ISCC 编译 installer/QtDesktopPet.iss
7. 安装器默认最终输出到项目根目录