dfeea9e93c
将 Tauri 窗口标题 HostBridge 处理收口到 title 模块 让桌面 dispatch 只委托窗口标题请求 同步桌面壳结构门禁、架构文档和共享记忆
44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
mod appearance;
|
|
pub(crate) mod capabilities;
|
|
mod badge;
|
|
mod clipboard;
|
|
mod dispatch;
|
|
pub(crate) mod files;
|
|
mod navigation;
|
|
mod network;
|
|
mod notifications;
|
|
pub(crate) mod protocol;
|
|
mod share;
|
|
mod title;
|
|
|
|
pub(crate) use protocol::HostBridgeReplayState;
|
|
pub(crate) use share::DesktopShareState;
|
|
|
|
use crate::host_bridge::dispatch::execute_host_bridge_request;
|
|
use crate::host_bridge::protocol::{
|
|
normalize_request_id, validate_request, HostBridgeReplayReservation, HostBridgeRequest,
|
|
HostBridgeResponse,
|
|
};
|
|
|
|
#[tauri::command]
|
|
pub(crate) async fn host_bridge_request(
|
|
app: tauri::AppHandle,
|
|
replay_state: tauri::State<'_, HostBridgeReplayState>,
|
|
mut request: HostBridgeRequest,
|
|
) -> Result<HostBridgeResponse, String> {
|
|
if let Some(response) = validate_request(&request) {
|
|
return Ok(response);
|
|
}
|
|
request.id = normalize_request_id(&request.id).unwrap_or(request.id);
|
|
|
|
let response = match replay_state.reserve(&request.id) {
|
|
HostBridgeReplayReservation::Wait(slot) => HostBridgeReplayState::wait_for_response(slot),
|
|
HostBridgeReplayReservation::Execute(slot) => {
|
|
let response = execute_host_bridge_request(app, request).await;
|
|
replay_state.complete(slot, response)
|
|
}
|
|
};
|
|
|
|
Ok(response)
|
|
}
|