完善定时提醒稳定性与管理能力
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
- AI 请求取消和对话清空
|
||||
- 角色文件夹导入和角色切换
|
||||
- 删除用户导入角色
|
||||
- 本地一次性提醒、提醒列表、取消提醒和到点通知
|
||||
- 本地一次性/重复提醒、提醒列表、取消提醒和到点通知
|
||||
- 内置/用户提醒音效切换、导入、删除和试听
|
||||
- Windows 打包脚本和 Inno Setup 安装器脚本
|
||||
- Release exe 双击不弹控制台窗口
|
||||
@@ -366,7 +366,7 @@ CommandDispatcher::dispatch(userText)
|
||||
|
||||
## 5.1 功能定位
|
||||
|
||||
实现本地一次性提醒功能。
|
||||
实现本地一次性和基础重复提醒功能。
|
||||
|
||||
用户可以输入:
|
||||
|
||||
@@ -386,12 +386,19 @@ CommandDispatcher::dispatch(userText)
|
||||
已新增 src/reminder/ 模块
|
||||
已支持一次性提醒解析、JSON 持久化、启动后加载、到点触发和状态标记
|
||||
已支持聊天创建 / 查询 / 取消提醒
|
||||
已支持设置页按状态查看提醒、取消 pending 提醒、清理已触发/已取消历史
|
||||
已支持设置页按状态查看提醒、取消 pending 提醒、编辑 pending 提醒、清理 20 天前已触发/已取消历史
|
||||
已支持 reminder_default / reminder_soft 内置音效
|
||||
已支持用户 wav 音效导入、删除、切换和试听
|
||||
已限制用户音效删除路径,只允许删除用户音效目录内的安全 sound id
|
||||
提醒触发时使用当前设置页选择的全局音效,ReminderItem.soundId 仅保留为历史兼容字段
|
||||
已接入 Qt Multimedia / QSoundEffect 播放提醒音效
|
||||
已预留 NotificationDispatcher,当前 Windows 仍由托盘通知承接
|
||||
已支持每天 / 每周 / 每月重复提醒
|
||||
已支持提醒触发后的“知道了”和“5分钟后再提醒”
|
||||
已支持提醒数据原子保存
|
||||
已支持多提醒可见队列,避免同时触发时互相覆盖
|
||||
已支持 60 秒兜底扫描,覆盖睡眠唤醒、系统时间变化和长间隔 timer 延迟场景
|
||||
通知后端不可用时会记录日志,不补气泡
|
||||
```
|
||||
|
||||
## 5.2 第一版范围
|
||||
@@ -400,6 +407,7 @@ CommandDispatcher::dispatch(userText)
|
||||
|
||||
```text
|
||||
一次性提醒
|
||||
每天 / 每周 / 每月重复提醒
|
||||
本地保存
|
||||
程序重启后提醒不丢
|
||||
到点后触发气泡和托盘通知
|
||||
@@ -411,7 +419,8 @@ CommandDispatcher::dispatch(userText)
|
||||
暂不做:
|
||||
|
||||
```text
|
||||
重复提醒
|
||||
工作日提醒
|
||||
自定义间隔重复提醒
|
||||
农历提醒
|
||||
复杂日历
|
||||
跨设备同步
|
||||
@@ -449,7 +458,20 @@ struct ReminderItem
|
||||
QDateTime remindAt;
|
||||
ReminderStatus status = ReminderStatus::Pending;
|
||||
QDateTime createdAt;
|
||||
QDateTime finishedAt; // triggered/canceled 记录的完成时间;旧数据缺失时按 remindAt 兼容
|
||||
QString soundId; // 历史兼容字段,触发时不再读取
|
||||
ReminderRecurrence recurrence;
|
||||
};
|
||||
|
||||
struct ReminderRecurrence
|
||||
{
|
||||
ReminderRecurrenceType type = ReminderRecurrenceType::None; // None / Daily / Weekly / Monthly
|
||||
int interval = 1;
|
||||
int weekday = 0; // 1-7,仅 weekly 使用
|
||||
int monthDay = 0; // 1-31,仅 monthly 使用
|
||||
int hour = -1;
|
||||
int minute = -1;
|
||||
QDateTime lastTriggeredAt;
|
||||
};
|
||||
```
|
||||
|
||||
@@ -473,12 +495,26 @@ QStandardPaths::AppConfigLocation/reminders.json
|
||||
"remindAt": "2026-06-01T20:00:00",
|
||||
"status": "pending",
|
||||
"createdAt": "2026-06-01T15:20:00",
|
||||
"soundId": ""
|
||||
"soundId": "",
|
||||
"recurrence": {
|
||||
"type": "none",
|
||||
"interval": 1,
|
||||
"weekday": 0,
|
||||
"monthDay": 0,
|
||||
"hour": -1,
|
||||
"minute": -1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
旧版 `reminders.json` 没有 `recurrence` 字段时按一次性提醒读取,继续兼容;没有 `finishedAt` 字段时,已触发/已取消历史按 `remindAt` 作为保留时间兜底。
|
||||
|
||||
提醒数据保存使用原子写入。写入失败时创建 / 取消会回滚内存变更,到点触发会保留 pending 并等待下次重试,不播放音效、不通知、不气泡。
|
||||
|
||||
历史记录默认只保留最近 20 天。自动清理和设置页“清理20天前历史”只删除超过 20 天的 triggered/canceled 记录,不删除 pending。
|
||||
|
||||
配置损坏时备份:
|
||||
|
||||
```text
|
||||
@@ -511,9 +547,17 @@ reminders.broken.yyyyMMdd-HHmmss.json
|
||||
1小时后
|
||||
两小时后
|
||||
2小时后
|
||||
每天9点
|
||||
每天提醒我9点打卡
|
||||
每日晚上8点
|
||||
每周一上午10点
|
||||
每周一提醒我上午10点周会
|
||||
每星期五下午3点
|
||||
每月3号9点
|
||||
每月3号提醒我9点交报告
|
||||
```
|
||||
|
||||
如果规则解析失败,后续可以再接 AI 解析。包含“每天 / 每周 / 每月 / 工作日 / 重复”等语义时,当前只返回“重复提醒尚未支持”,不创建一次性提醒。
|
||||
如果规则解析失败,后续可以再接 AI 解析。当前重复提醒只支持每天 / 每周 / 每月。包含“工作日 / 每两天 / 每月最后一天 / 每季度 / 农历 / 自定义复杂规则”等语义时,返回明确暂不支持提示,不创建一次性提醒。
|
||||
|
||||
## 5.7 AI 辅助解析的设计边界
|
||||
|
||||
@@ -558,7 +602,12 @@ userText
|
||||
```text
|
||||
桌宠可见:播放当前全局音效,显示 ChatBubble + 切 happy,无 happy 时回退 talk,不发 Windows 通知
|
||||
桌宠隐藏:播放当前全局音效,触发 Windows 托盘通知,不在下次显示时补气泡
|
||||
AI 正在请求或流式回复:按隐藏场景处理,播放当前全局音效并发 Windows 通知,不显示气泡,不进入补气泡队列
|
||||
Windows 托盘通知后端不可用:记录日志,不补气泡,不进入可见队列
|
||||
用户拖动中:播放当前全局音效,不打断 drag,拖动结束后显示气泡,不发 Windows 通知
|
||||
多条提醒同时触发:可见状态下进入队列逐条展示,避免后一条覆盖前一条
|
||||
桌宠可见触发时显示轻量操作区:“知道了”关闭当前提示,“5分钟后再提醒”固定创建新的 5 分钟一次性提醒
|
||||
重复提醒触发后先推进下一次 remindAt 并保存;稍后提醒不会影响原重复规则
|
||||
```
|
||||
|
||||
提醒文案:
|
||||
@@ -1020,8 +1069,8 @@ CustomSearchProvider
|
||||
## 9.2 第二步:定时提醒
|
||||
|
||||
```text
|
||||
当前已落地一次性提醒、提醒列表、取消提醒、到点气泡/托盘通知和提醒音效管理。
|
||||
后续可继续补确认/稍后提醒、重复提醒和跨平台通知实现。
|
||||
当前已落地一次性提醒、每天/每周/每月重复提醒、提醒列表、取消提醒、编辑 pending 提醒、20 天历史保留、到点气泡/托盘通知、稍后提醒和提醒音效管理。
|
||||
后续可继续补工作日/自定义间隔、跨平台通知实现和更复杂的提醒管理能力。
|
||||
```
|
||||
|
||||
## 9.3 第三步:天气查询
|
||||
|
||||
Reference in New Issue
Block a user