f04daee4a4
将 Expo 系统配色读取收口到 appearance 模块 将 Tauri 窗口主题读取收口到 appearance 模块 同步原生壳结构门禁和架构文档清单
46 lines
1.3 KiB
Rust
46 lines
1.3 KiB
Rust
use crate::host_bridge::protocol::{failed, ok, HostBridgeRequest, HostBridgeResponse};
|
|
use crate::shell::webview::color_scheme_from_theme;
|
|
use serde_json::json;
|
|
use tauri::Manager;
|
|
|
|
pub(crate) fn desktop_appearance_color_scheme(
|
|
app: &tauri::AppHandle,
|
|
request: &HostBridgeRequest,
|
|
) -> HostBridgeResponse {
|
|
match app.get_webview_window("main") {
|
|
Some(window) => match window.theme() {
|
|
Ok(theme) => ok_color_scheme(request, color_scheme_from_theme(theme)),
|
|
Err(error) => failed(request.id.clone(), "host_error", error.to_string()),
|
|
},
|
|
None => failed(request.id.clone(), "host_error", "main window not found"),
|
|
}
|
|
}
|
|
|
|
fn ok_color_scheme(request: &HostBridgeRequest, color_scheme: &'static str) -> HostBridgeResponse {
|
|
ok(
|
|
request.id.clone(),
|
|
json!({
|
|
"colorScheme": color_scheme
|
|
}),
|
|
)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::host_bridge::protocol::request;
|
|
|
|
#[test]
|
|
fn ok_color_scheme_reports_contract_shape() {
|
|
let response = ok_color_scheme(&request("appearance.getColorScheme"), "dark");
|
|
|
|
assert!(response.ok);
|
|
assert_eq!(
|
|
response.result.expect("appearance result"),
|
|
json!({
|
|
"colorScheme": "dark"
|
|
})
|
|
);
|
|
}
|
|
}
|