Mac 剪贴板自动同步(上行)+ 菜单栏快捷(Phase 4a)
- MacClipboardMonitor:NSPasteboard changeCount 轮询 500ms + ProcessInfo.beginActivity(.userInitiatedAllowingIdleSystemSleep) 防 App Nap,本机复制的普通文本自动上传云剪贴板。移植桌面 desktop/platform/clipboard.go 的 Monitor 回环守卫(selfHash 自写回声消费一次并解除 + lastHash 去重)与 clipboard_darwin.m 过滤(org.nspasteboard.{Concealed,Transient,AutoGenerated} 敏感标记跳过 / Handoff shared-pasteboard 暂存路径跳过 / 富文本从 RTF·RTFD 派生纯文本)
- EngineController:加 uploadClipboardText(_:)(monitor 直传已解析文本,绕过再读 pasteboard 避免暂存路径等边角,静默不弹空提示);macOS 写剪贴板前 armSelfWrite 武装守卫(手动拉取写入的内容不被 monitor 再上传成回环)
- 设置加「自动同步本机复制(上行)」开关(@AppStorage macClipboardAutoSync,默认开);MacRootView 按开关 onAppear/onChange 启停、登出(视图消失)即停;菜单栏加剪贴板上传 / 拉取(登录态)
- 下行自动(远端 → 本机自动写剪贴板)仍待办:共享引擎 JS 仅在手动 clipboardPull 时回灌原生 "clipboard" 通知,远端 SSE clipboard:update 在 WebView 壳不落原生(桌面走 Wails 专路 ApplyRemoteClipboard);补齐须改 web/src 引擎 + prod 部署(Mac 从线上加载 engine.html)+ 按 device_type=macos 门控免误伤 iOS。手动拉取(设置 / 菜单栏)已可用
- 验证:just mac-build(CommilitiaDropMac.app)+ iOS 模拟器(CommilitiaDrop.app)均 BUILD SUCCEEDED
This commit is contained in:
@@ -558,6 +558,14 @@ final class EngineController: NSObject
|
||||
sendCommand("clipboardUpload", payload: [ "content": content ])
|
||||
}
|
||||
|
||||
// 指定文本上传云剪贴板(供 Mac 剪贴板自动同步 monitor 直传已解析文本,绕过再读 pasteboard——
|
||||
// 避免富文本 Handoff 暂存路径等边角;静默,不弹空提示)。
|
||||
func uploadClipboardText(_ content: String)
|
||||
{
|
||||
guard !content.isEmpty else { return }
|
||||
sendCommand("clipboardUpload", payload: [ "content": content ])
|
||||
}
|
||||
|
||||
// 剪贴板下行:让引擎拉一次云剪贴板,回来写入 UIPasteboard(见 handleNotify "clipboard")。
|
||||
func pullClipboard()
|
||||
{
|
||||
@@ -997,6 +1005,8 @@ extension EngineController: WKScriptMessageHandler
|
||||
if let p = payload as? [String: Any], let content = p["content"] as? String, !content.isEmpty
|
||||
{
|
||||
#if os(macOS)
|
||||
// 先武装自写守卫(令剪贴板自动同步 monitor 认出刚拉取写入的内容为自身回声、不再上传),再写。
|
||||
MacClipboardMonitor.shared.armSelfWrite(content)
|
||||
NSPasteboard.general.clearContents()
|
||||
NSPasteboard.general.setString(content, forType: .string)
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user