f273f2466e
- MacQuickSend(@Observable 单例):激活 app + NSOpenPanel 多选文件 → 置 pending;MacRootView 观察 pending → 切到「传输」区 + 弹 MacComposeSheet 选目标设备发送(复用现有发送流程与 engine.sendFile) - MacHotkey:Carbon RegisterEventHotKey 全局热键 ⌃⌥⌘S(无须辅助功能权限)触发 Quick Send。事件处理器须 C 函数指针,用不捕获闭包(只调静态 MacQuickSend.trigger)+ dispatch 主队列再弹模态(避免 Carbon 回调内跑模态)。登录(MacRootView onAppear)注册、登出(onDisappear)注销 - 菜单栏加「快速发送文件…」(登录态) - 桌面 Wails 实际未实现全局热键(仅曾计划),此为原生 Mac 增益。键位暂固定 ⌃⌥⌘S,后续可做成设置项 - 验证:just mac-build(CommilitiaDropMac.app)BUILD SUCCEEDED;iOS 无关(仅改 macOS-only 文件),不受影响
32 lines
1.1 KiB
Swift
32 lines
1.1 KiB
Swift
#if os(macOS)
|
||
import AppKit
|
||
import Observation
|
||
|
||
// Quick Send:全局热键(MacHotkey)或菜单栏触发 → 激活 app + NSOpenPanel 选文件 → 主窗口切到「传输」区
|
||
// 并弹发送表单选目标设备发送。pending 为待发文件,MacRootView 观察它、présente MacComposeSheet。
|
||
@Observable
|
||
final class MacQuickSend
|
||
{
|
||
static let shared = MacQuickSend()
|
||
private init() {}
|
||
|
||
var pending: [URL] = []
|
||
|
||
// 激活 app + 选文件(主线程同步)。有选中即置 pending,触发主窗口的发送表单。未登录时 MacRootView
|
||
// 未挂载、表单不出现——Quick Send 仅登录态有意义(菜单项 / 热键均在登录后才提供 / 注册)。
|
||
static func trigger()
|
||
{
|
||
NSApp.activate()
|
||
let panel = NSOpenPanel()
|
||
panel.canChooseFiles = true
|
||
panel.canChooseDirectories = false
|
||
panel.allowsMultipleSelection = true
|
||
panel.prompt = "发送"
|
||
if panel.runModal() == .OK, !panel.urls.isEmpty
|
||
{
|
||
shared.pending = panel.urls
|
||
}
|
||
}
|
||
}
|
||
#endif
|