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 文件),不受影响
51 lines
1.5 KiB
Swift
51 lines
1.5 KiB
Swift
#if os(macOS)
|
||
import SwiftUI
|
||
|
||
// 菜单栏常驻内容:账号 / 在线设备数 / 打开主窗口。后续接入一键剪贴板 push/pull + Quick Send。
|
||
struct MacMenuContent: View
|
||
{
|
||
@Environment(EngineController.self) private var engine
|
||
@Environment(AuthManager.self) private var auth
|
||
@Environment(\.openWindow) private var openWindow
|
||
|
||
var body: some View
|
||
{
|
||
VStack(alignment: .leading, spacing: 10)
|
||
{
|
||
Text("Commilitia Drop")
|
||
.font(.headline)
|
||
|
||
if let name = auth.session?.user.name
|
||
{
|
||
Text(name)
|
||
.font(.caption)
|
||
.foregroundStyle(.secondary)
|
||
Text("在线设备:\(engine.devices.filter(\.online).count)")
|
||
.font(.caption)
|
||
.foregroundStyle(.secondary)
|
||
}
|
||
else
|
||
{
|
||
Text("未登录")
|
||
.font(.caption)
|
||
.foregroundStyle(.secondary)
|
||
}
|
||
|
||
if auth.session != nil
|
||
{
|
||
Divider()
|
||
Button("快速发送文件…") { MacQuickSend.trigger() }
|
||
Button("上传本机剪贴板") { engine.uploadClipboard() }
|
||
Button("拉取云剪贴板") { engine.pullClipboard() }
|
||
}
|
||
|
||
Divider()
|
||
Button("打开主窗口") { openWindow(id: "main") }
|
||
Button("退出") { NSApplication.shared.terminate(nil) }
|
||
}
|
||
.padding(12)
|
||
.frame(width: 240)
|
||
}
|
||
}
|
||
#endif
|