收口原生剪贴板桥接边界
将 Expo 剪贴板 HostBridge 读写收口到 clipboard 模块 将 Tauri 剪贴板 HostBridge 响应收口到 clipboard 模块 同步原生壳结构门禁、架构文档和共享记忆
This commit is contained in:
@@ -2,9 +2,11 @@ import * as Clipboard from 'expo-clipboard';
|
||||
|
||||
import {
|
||||
type ClipboardReadTextResult,
|
||||
type ClipboardWriteTextPayload,
|
||||
type HostBridgeError,
|
||||
normalizeHostBridgeClipboardText,
|
||||
} from '../../../../packages/shared/src/contracts/hostBridge';
|
||||
import { invalidRequest } from './protocol';
|
||||
|
||||
export async function writeMobileClipboardText(rawText: unknown) {
|
||||
const clipboardText = normalizeHostBridgeClipboardText(rawText);
|
||||
@@ -16,6 +18,19 @@ export async function writeMobileClipboardText(rawText: unknown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function writeMobileHostBridgeClipboardText(payload: unknown) {
|
||||
const text = (payload as ClipboardWriteTextPayload | undefined)?.text;
|
||||
if (!(await writeMobileClipboardText(text))) {
|
||||
throw invalidRequest('text is required');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
export function readMobileHostBridgeClipboardText() {
|
||||
return readMobileClipboardText();
|
||||
}
|
||||
|
||||
export async function readMobileClipboardText(): Promise<ClipboardReadTextResult> {
|
||||
const result = normalizeHostBridgeClipboardText(
|
||||
await Clipboard.getStringAsync(),
|
||||
|
||||
@@ -2,7 +2,6 @@ import * as Linking from 'expo-linking';
|
||||
import { Platform } from 'react-native';
|
||||
|
||||
import {
|
||||
type ClipboardWriteTextPayload,
|
||||
type HapticsImpactPayload,
|
||||
HOST_BRIDGE_VERSION,
|
||||
type HostBridgeRequest,
|
||||
@@ -31,8 +30,8 @@ import { resetQrScannerForTest, scanQrCode } from './scanner';
|
||||
import { openShare } from './share';
|
||||
import { showMobileLocalNotification } from './notifications';
|
||||
import {
|
||||
readMobileClipboardText,
|
||||
writeMobileClipboardText,
|
||||
readMobileHostBridgeClipboardText,
|
||||
writeMobileHostBridgeClipboardText,
|
||||
} from './clipboard';
|
||||
import { runMobileHapticsImpact } from './haptics';
|
||||
import { setMobileAppBadgeCount } from './badge';
|
||||
@@ -53,18 +52,6 @@ export function configureMobileHostBridgeNavigation(
|
||||
navigation = nextNavigation;
|
||||
}
|
||||
|
||||
async function writeClipboard(payload: unknown) {
|
||||
if (
|
||||
!(await writeMobileClipboardText(
|
||||
(payload as ClipboardWriteTextPayload | undefined)?.text,
|
||||
))
|
||||
) {
|
||||
throw invalidRequest('text is required');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async function runHaptics(payload: unknown) {
|
||||
if (
|
||||
!(await runMobileHapticsImpact(
|
||||
@@ -119,9 +106,9 @@ export async function dispatchMobileHostBridgeRequest(
|
||||
case 'network.status':
|
||||
return ok(request, await getMobileHostBridgeNetworkStatus());
|
||||
case 'clipboard.writeText':
|
||||
return ok(request, await writeClipboard(request.payload));
|
||||
return ok(request, await writeMobileHostBridgeClipboardText(request.payload));
|
||||
case 'clipboard.readText':
|
||||
return ok(request, await readMobileClipboardText());
|
||||
return ok(request, await readMobileHostBridgeClipboardText());
|
||||
case 'file.exportText':
|
||||
return ok(request, await exportTextFile(request.payload));
|
||||
case 'file.importText':
|
||||
|
||||
Reference in New Issue
Block a user