b55cb615a3
- MacNotifier:窗口非前台(!NSApp.isActive)时对「收到消息 / 收到文件」发原生系统通知(UNUserNotificationCenter,授权已由引擎启动的 PushRegistry.requestAuthorizationAndRegister 一并请求)。对齐桌面 app.ShowNotification——前台事件由应用内 NoticeOverlay / 未读红点负责,仅 app 非活跃才发系统通知,避免与应用内提示重复。引擎 handleNotify 的 "message"(新到对端消息,非当前会话)+ "transferDone"(incoming 且 completed)两处加 macOS 挂钩 - 接收目录可配:DownloadManager.downloadDir 在 macOS 读 UserDefaults macDownloadDir(设置页 NSOpenPanel 选目录),未配 / 目录已失效则回退系统「下载」目录(比「文稿」更符桌面直觉);iOS 仍固定沙盒 Documents。设置加「接收」区(显示当前保存目录 + 选择目录…)。非沙盒构建用普通路径即可;沙盒分发(Phase 6)须改安全作用域书签 - 验证:just mac-build(CommilitiaDropMac.app)+ iOS 模拟器(CommilitiaDrop.app)均 BUILD SUCCEEDED
23 lines
978 B
Swift
23 lines
978 B
Swift
#if os(macOS)
|
||
import AppKit
|
||
import UserNotifications
|
||
|
||
// 窗口非前台时的原生系统通知(收到消息 / 文件)。对齐桌面 app.ShowNotification:前台事件由应用内
|
||
// NoticeOverlay / 未读红点负责,仅当 app 非活跃(NSApp.isActive == false)才发系统通知,避免与应用内
|
||
// 提示重复。通知授权已由引擎启动时的 PushRegistry.requestAuthorizationAndRegister 一并请求。
|
||
enum MacNotifier
|
||
{
|
||
// 仅在 app 非活跃时发。title/body 由调用点给出(已是用户可读文本)。
|
||
static func notifyIfInactive(title: String, body: String)
|
||
{
|
||
guard !NSApp.isActive else { return }
|
||
let content = UNMutableNotificationContent()
|
||
content.title = title
|
||
content.body = body
|
||
content.sound = .default
|
||
let req = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
||
UNUserNotificationCenter.current().add(req)
|
||
}
|
||
}
|
||
#endif
|