#if os(macOS) import AppKit import SwiftUI // Quick Send:全局热键(MacHotkey)或菜单栏触发 → 激活 app + NSOpenPanel 选文件 → 弹出独立发送面板 // (自持 NSWindow 托 MacComposeSheet)选目标设备发送。**自持面板而非挂主窗口的 sheet**:Quick Send 的 // 典型场景正是「关主窗口、仅菜单栏 / 热键常驻」,此时主窗口 MacRootView 未挂载、其 sheet 无处可弹(会 // 静默失效)——故此处不依赖主窗口,直接以自己的窗口呈现发送表单(ultracode 审查修复)。 @MainActor final class MacQuickSend { static let shared = MacQuickSend() private init() {} private var panel: NSWindow? // 激活 app + 选文件(主线程同步)。有选中即弹发送面板;无可达设备则提示。 static func trigger() { NSApp.activate() let p = NSOpenPanel() p.canChooseFiles = true p.canChooseDirectories = false p.allowsMultipleSelection = true p.prompt = "发送" guard p.runModal() == .OK, !p.urls.isEmpty else { return } shared.present(urls: p.urls) } private func present(urls: [URL]) { let engine = MacBackgroundController.shared.engine guard !engine.sendableDevices().isEmpty else { let alert = NSAlert() alert.messageText = "暂无可达设备" alert.informativeText = "请确保有其他在线设备(或可唤醒的 iOS 设备)。" alert.runModal() return } // 复用 MacComposeSheet(待发文件 + 目标设备选择);发送 / 取消后关面板。 let root = MacComposeSheet(urls: urls, onCancel: { [weak self] in self?.close() }, onSend: { [weak self] device in for url in urls { engine.sendFile(to: device, fileURL: url) } self?.close() }) .environment(engine) let win = NSWindow(contentViewController: NSHostingController(rootView: root)) win.title = "快速发送" win.styleMask = [ .titled, .closable ] win.isReleasedWhenClosed = false win.center() win.makeKeyAndOrderFront(nil) NSApp.activate() panel = win } private func close() { panel?.close() panel = nil } } #endif