Files
Genarrative/apps/mobile-shell/src/host-bridge/dispatch.ts
T
kdletters 387a1c26e3 完成全量检查整改
清理已跟踪原始日志与个人本地配置
修复前后端有效门禁、测试和构建问题
补齐生产 Jenkins、SpacetimeDB 本地命令与文档约束
收紧图片编辑器状态、附件与媒体引用测试
排除已下线旧创作入口测试并清理 warning
2026-07-17 16:56:46 +08:00

108 lines
3.8 KiB
TypeScript

import { type HostBridgeRequest } from '../../../../packages/shared/src/contracts/hostBridge';
import { getMobileHostBridgeAppearanceColorScheme } from './appearance';
import { setMobileAppBadgeCount } from './badge';
import {
readMobileHostBridgeClipboardText,
writeMobileHostBridgeClipboardText,
} from './clipboard';
import {
captureMobileHostBridgeImageFile,
exportMobileHostBridgeAudioFile,
exportMobileHostBridgeImageFile,
exportMobileHostBridgeTextFile,
importMobileHostBridgeAudioFile,
importMobileHostBridgeDocumentFile,
importMobileHostBridgeImageFile,
importMobileHostBridgeTextFile,
} from './files';
import { runMobileHostBridgeHapticsImpact } from './haptics';
import {
openMobileHostBridgeExternalUrl,
openMobileHostBridgeNativePage,
reloadMobileHostBridgeWebView,
} from './navigation';
import { getMobileHostBridgeNetworkStatus } from './network';
import { showMobileHostBridgeLocalNotification } from './notifications';
import {
failure,
type MobileHostBridgeNavigation,
unsupported,
} from './protocol';
import { getMobileHostBridgeRuntimeResponse } from './runtime';
import { resetQrScannerForTest, scanMobileHostBridgeQrCode } from './scanner';
import {
openShare,
resetMobileHostBridgeShareTargetForTest,
setMobileHostBridgeShareTarget,
} from './share';
let navigation: MobileHostBridgeNavigation | null = null;
export function configureMobileHostBridgeNavigation(
nextNavigation: MobileHostBridgeNavigation | null,
) {
navigation = nextNavigation;
}
export async function dispatchMobileHostBridgeRequest(
request: HostBridgeRequest,
) {
switch (request.method) {
case 'host.getRuntime':
return getMobileHostBridgeRuntimeResponse(request);
case 'appearance.getColorScheme':
return getMobileHostBridgeAppearanceColorScheme(request);
case 'app.openExternalUrl':
return openMobileHostBridgeExternalUrl(request);
case 'app.reloadWebView':
return reloadMobileHostBridgeWebView(request, navigation);
case 'network.status':
return getMobileHostBridgeNetworkStatus(request);
case 'clipboard.writeText':
return writeMobileHostBridgeClipboardText(request);
case 'clipboard.readText':
return readMobileHostBridgeClipboardText(request);
case 'file.exportText':
return exportMobileHostBridgeTextFile(request);
case 'file.importText':
return importMobileHostBridgeTextFile(request);
case 'file.importDocument':
return importMobileHostBridgeDocumentFile(request);
case 'file.exportImage':
return exportMobileHostBridgeImageFile(request);
case 'file.importImage':
return importMobileHostBridgeImageFile(request);
case 'file.captureImage':
return captureMobileHostBridgeImageFile(request);
case 'scanner.scanQrCode':
return scanMobileHostBridgeQrCode(request);
case 'file.importAudio':
return importMobileHostBridgeAudioFile(request);
case 'file.exportAudio':
return exportMobileHostBridgeAudioFile(request);
case 'haptics.impact':
return runMobileHostBridgeHapticsImpact(request);
case 'notification.showLocal':
return showMobileHostBridgeLocalNotification(request);
case 'app.setBadgeCount':
return setMobileAppBadgeCount(request);
case 'share.open':
return openShare(request);
case 'share.setTarget':
return setMobileHostBridgeShareTarget(request);
case 'navigation.openNativePage':
return openMobileHostBridgeNativePage(request, navigation);
case 'auth.requestLogin':
case 'payment.request':
return failure(request, unsupported(request.method));
default:
return failure(request, unsupported(request.method));
}
}
export function resetMobileHostBridgeDispatchForTest() {
navigation = null;
resetMobileHostBridgeShareTargetForTest();
resetQrScannerForTest();
}