feat: 接入消息未读数、全部已读与首页红点角标同步。

固定消息中心为首页入口,并在推送到达、已读后刷新桌面角标。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-21 18:02:43 +08:00
co-authored by Cursor
parent e7f1d777dd
commit caeeb9a1cf
18 changed files with 748 additions and 37 deletions
@@ -8,6 +8,8 @@ import Foundation
/// 首页菜单静态 catalog,与服务端 permission URI 取交集后展示。
enum HomeMenuCatalog {
private static let fixedHomeEntryURIs: Set<String> = ["message_center"]
/// 全部已知菜单项,对齐 Android `Constants.menuList`。
static let allItems: [HomeMenuItem] = [
HomeMenuItem(uri: "space_settings", title: "空间设置", iconName: "home_menu_space"),
@@ -45,6 +47,7 @@ enum HomeMenuCatalog {
/// 将服务端权限映射为可展示菜单,保持服务端顺序。
static func visibleMenus(from permissions: [HomePermissionItem]) -> [HomeMenuItem] {
permissions.compactMap { permission in
guard isCustomizable(uri: permission.uri) else { return nil }
guard let catalog = allItems.first(where: { $0.uri == permission.uri }) else { return nil }
return HomeMenuItem(
uri: catalog.uri,
@@ -59,4 +62,9 @@ enum HomeMenuCatalog {
static func item(for uri: String) -> HomeMenuItem? {
allItems.first { $0.uri == uri }
}
/// 判断入口是否允许出现在首页常用应用及其自定义页面中。
static func isCustomizable(uri: String) -> Bool {
!fixedHomeEntryURIs.contains(uri)
}
}