收口桌面剪贴板边界
将 Tauri 剪贴板读写收口到 clipboard 模块 让桌面 HostBridge dispatch 只负责剪贴板 payload 分发 同步原生壳结构门禁和架构文档清单
This commit is contained in:
@@ -54,6 +54,14 @@ const desktopHostBridgeCapabilitiesSource = fs.readFileSync(
|
||||
desktopHostBridgeCapabilitiesPath,
|
||||
'utf8',
|
||||
);
|
||||
const desktopHostBridgeClipboardPath = new URL(
|
||||
'../src-tauri/src/host_bridge/clipboard.rs',
|
||||
import.meta.url,
|
||||
);
|
||||
const desktopHostBridgeClipboardSource = fs.readFileSync(
|
||||
desktopHostBridgeClipboardPath,
|
||||
'utf8',
|
||||
);
|
||||
const desktopHostBridgeDispatchPath = new URL(
|
||||
'../src-tauri/src/host_bridge/dispatch.rs',
|
||||
import.meta.url,
|
||||
@@ -178,6 +186,7 @@ const expectedDesktopRustRootEntries = [
|
||||
];
|
||||
const expectedDesktopHostBridgeRustFiles = [
|
||||
'capabilities.rs',
|
||||
'clipboard.rs',
|
||||
'dispatch.rs',
|
||||
'files.rs',
|
||||
'mod.rs',
|
||||
@@ -893,7 +902,12 @@ function extractDesktopHostBridgeMethodBody(source, method) {
|
||||
throw new Error(`desktop shell HostBridge missing method ${method}`);
|
||||
}
|
||||
|
||||
const nextMethodStart = source.indexOf('\n "', methodStart + method.length);
|
||||
const nextMethodMatch = source
|
||||
.slice(methodStart + method.length)
|
||||
.match(/\n "[^"]+"\s*=>/);
|
||||
const nextMethodStart = nextMethodMatch
|
||||
? methodStart + method.length + nextMethodMatch.index
|
||||
: -1;
|
||||
return source.slice(
|
||||
methodStart,
|
||||
nextMethodStart > methodStart ? nextMethodStart : undefined,
|
||||
@@ -903,7 +917,7 @@ function extractDesktopHostBridgeMethodBody(source, method) {
|
||||
function extractDesktopDialogFilter(source, method, filterLabel) {
|
||||
const methodBody = extractDesktopHostBridgeMethodBody(source, method);
|
||||
const match = methodBody.match(
|
||||
new RegExp(`\\.add_filter\\("${filterLabel}",\\s*&\\[([^\\]]*)\\]\\)`),
|
||||
new RegExp(`\\.add_filter\\(\\s*"${filterLabel}",\\s*&\\[([^\\]]*)\\]\\s*,?\\s*\\)`),
|
||||
);
|
||||
if (!match) {
|
||||
throw new Error(
|
||||
@@ -1268,7 +1282,7 @@ const desktopHostBridgePayloadLimits = {
|
||||
'WINDOW_TITLE_MAX_LENGTH',
|
||||
),
|
||||
HOST_BRIDGE_CLIPBOARD_TEXT_MAX_LENGTH: extractRustNumberConst(
|
||||
rustHostSource,
|
||||
desktopHostBridgeClipboardSource,
|
||||
'CLIPBOARD_TEXT_MAX_LENGTH',
|
||||
),
|
||||
HOST_BRIDGE_LOCAL_NOTIFICATION_TITLE_MAX_LENGTH: extractRustNumberConst(
|
||||
@@ -1781,6 +1795,7 @@ const expectedRustRootEntries = [
|
||||
];
|
||||
const expectedRustHostBridgeFiles = [
|
||||
'capabilities.rs',
|
||||
'clipboard.rs',
|
||||
'dispatch.rs',
|
||||
'files.rs',
|
||||
'mod.rs',
|
||||
@@ -1878,7 +1893,9 @@ const requiredRustHostSnippets = [
|
||||
'"file.exportAudio"',
|
||||
'"file.imageDropped"',
|
||||
'"notification.showLocal"',
|
||||
'Ok(text) => normalize_clipboard_text(text)',
|
||||
'write_desktop_clipboard_text(&app, text)',
|
||||
'read_desktop_clipboard_text(&app)',
|
||||
'normalize_clipboard_text(&text)',
|
||||
'tauri_plugin_dialog::init()',
|
||||
'tauri_plugin_notification::init()',
|
||||
'tauri_plugin_notification::{NotificationExt, PermissionState}',
|
||||
|
||||
Reference in New Issue
Block a user