• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC) • 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库) • 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo 增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
5.4 KiB
5.4 KiB
MeowOS 通知系统设计(M2 通知存储 + 分发,阶段 B/D 前置)
状态:设计稿定稿讨论中(2026-08-29,用户已给定多数决策)。按 FREWORKS §4/附C + 用户约定,遵循 freedesktop.org 通知规范。实施前仅剩"应用配额"细节待深入讨论(见 §7)。
1. 定位
- MeowOS 通知中心的后端(存储+分发),是阶段 B 通知中心 UI + 阶段 D(M2 通知存储)的前提。
- 生产者 = MeowAPP(原生 IPC)+ 系统事件(系统抽象为 App) + 外部桌面 app(D-Bus 桥)。
2. 通知标准(freedesktop.org Desktop Notifications,用户约定)
遵循 org.freedesktop.Notifications(D-Bus 接口),字段严格按标准:
- app_name(来源应用名)
- replaces_id(更新/替换通知 id;0=新建)
- app_icon(图标,指 icon name 或 path)
- summary(标题,单行)
- body(正文,可多行)
- actions[](按钮,可选;动作回调)
- hints{}(提示,含
x-canonical-*/progress/图片数据等;我们用hints传 target Activity、进度 percent 等) - expire_timeout(超时 ms;-1=常驻/ONGOING,0=不自动过期)
- 返回新版通知 id。
MeowOS 扩展:hints 内加 MeowOS 专有键(如 meow.target_activity、meow.progress)用于通知中心点击跳转/进度条显示。媒体通知走 MPRIS(org.mpris.MediaPlayer2,另行)。
3. 双接口(FREWORKS 附C,已定)
- 原生 IPC:MeowAPP 经 AF_UNIX socket 发
MSG_NOTIFY(FREWORKS §4 通定协议 0x0020)+MSG_NOTIFY_ACK(0x0021)/DISMISS(0x0022)/LIST(0x0023)。 - D-Bus 桥
meow_notify_dbus(独立小守护,链 libdbus/GDBus,系统总线注册org.freedesktop.Notifications):收到标准Notify()→ 经 MeowOS IPC 后端入通知存储;后端关闭/动作 → 回发信号。libdbus-1/libdbus-glib/libgio 已确认可用。
4. 通知数据结构(存内存 + 转储)
每通知字段(对齐 freedesktop + MeowOS):
id(uint32) / app_name / app_icon / summary / body / actions[] / hints{}
expire_timeout / created_ms / dismissed / ongoing(bool)
target_activity(可选, 来自 hints) / progress(可选 int)
统一从 IPC/D-Bus 两路解析入该结构。
5. 存储分层(用户已定 2026-08-29)
- 关键配置优先板载:设置类(notify.* 配额等)存板载
/usr/data/meow/settings.conf(B2a),确保无卡时系统正常工作。 - 实时通知 → 本地内存(板载,动态分配/ring)。
- 超时/转储 → TF 卡
MeowOS/notifications/(系统约定:系统文件统一放 MeowOS/ 下,非 MeowData/——MeowData 是应用专属数据根)(转储区,如 notifications/.json 或 appended 日志)。 - 无 TF 卡可运行(本地内存态即可,不依赖卡;TF 卡在时才转储)。转储/日志类是可降级数据(无卡用 /tmp 回退),配置类永远板载。
- 本地数据清理策略:
- 关机/重启前 → 清理本地内存通知数据(正常关机路径)。
- 异常关机(重启后)→ 开机时识别并清理本地残留。
- TF 卡转储区:保留最新 10MB(ring/截断),不被电源事件清理(持久留存)。
6. 通知生命周期(FREWORKS §4 已定,作参考)
- 内存态:每应用配额(待讨论 §7),满丢最旧;ttl 过期(1s 粒度);ONGOING 常驻(服务死随清)。
- 转储:超时/入 TF 卡区。
7. 【已定】应用配额(用户拍板,2026-08-29)
- 每个 App 最多申请 4 个通知类型(category)。
- 每个类型活跃(未过期)通知上限 4 条。
- 媒体通知除外:单个 App 只允许保留 1 个媒体通知;允许多个媒体 App 同时(多应用同时播放场景),UI/逻辑后期处理好。
- 数据类型:
notify.category(App 声明用哪些类型,≤4) /notify.category_quota(每类型 4,默认)。 - 系统事件:系统也抽象为 App(
app_id=system),同样走配额(系统通知也占"系统"App 的类型/条数配额)。 - 配额只管内存活跃态;转储到 TF 的历史不受配额限制(只受 10MB 总量)。
8. 转储规则(用户拍板,2026-08-29)
- 通知创建 10 秒后自动转储到 TF 卡(无论是否过期/被清)——通知中心显示"最近 10 秒内活跃" + TF 归档历史。
- 正常电源事件(关机/重启)触发清除板载通知数据之前:先转储所有未上卡的通知,再清除板载。
- 异常关机:开机时清理板载残留通知数据。
- TF 卡转储区
MeowOS/notifications/:保留最新 10MB(ring/截断),不被电源事件清理(持久留存)。 - 无 TF 卡:系统可运行(内存态通知即可),不依赖卡。
9. 通知中心 UI(阶段 B)
- 状态栏下滑打开通知中心(用户已定),列表显示通知(app 图标 + summary + body + target Activity),点击按路由表解析跳转(M3 导航栈),下拉关闭/清除。此部分依赖 M2 存储 + M3,后置。
10. 分步实施建议
- M2a 通知存储 + 原生 IPC:按上面的配额(category 级)+ TTL 10s 转储钩子 + 系统事件源(系统作 App)。→ 可先落地。
- M2b D-Bus 桥 meow_notify_dbus(org.freedesktop.Notifications 桥接)。
- M2c 转储 TF 卡 + 10MB 保留 + 关机前转储/开机清理。
- M5 通知中心 UI(阶段 B)+ media 通知(MPRIS)。