Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindServiceHandlers/NativeHost/
ShowMessageBox.rs

1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3//! Wire method: `nativeHost:showMessageBox`.
4//! Surfaces a blocking modal message dialog via `tauri_plugin_dialog`.
5//! Returns `{ response: 0 }` (OK pressed) or `{ response: 1 }` (dismissed).
6//! VS Code destructures `result.response` to determine which button was chosen.
7
8use serde_json::{Value, json};
9use tauri::AppHandle;
10use tauri_plugin_dialog::{DialogExt, MessageDialogKind};
11
12pub async fn NativeShowMessageBox(ApplicationHandle:AppHandle, Arguments:Vec<Value>) -> Result<Value, String> {
13	let Options = Arguments.first().cloned().unwrap_or(Value::Null);
14	let Message = Options.get("message").and_then(Value::as_str).unwrap_or("").to_string();
15	let Detail = Options.get("detail").and_then(Value::as_str).map(str::to_string);
16	let DialogType = Options
17		.get("type")
18		.and_then(Value::as_str)
19		.map(|S| S.to_lowercase())
20		.unwrap_or_default();
21	let Title = Options.get("title").and_then(Value::as_str).unwrap_or("").to_string();
22	let Kind = match DialogType.as_str() {
23		"warning" | "warn" => MessageDialogKind::Warning,
24		"error" => MessageDialogKind::Error,
25		_ => MessageDialogKind::Info,
26	};
27	let Handle = ApplicationHandle.clone();
28	let Joined = tokio::task::spawn_blocking(move || -> bool {
29		let mut Builder = Handle.dialog().message(&Message).kind(Kind);
30		if !Title.is_empty() {
31			Builder = Builder.title(&Title);
32		}
33		if let Some(DetailText) = Detail.as_deref() {
34			Builder = Builder.title(DetailText);
35		}
36		Builder.blocking_show()
37	})
38	.await;
39	match Joined {
40		Ok(Answered) => Ok(json!({ "response": if Answered { 0 } else { 1 } })),
41		Err(Error) => Err(format!("showMessageBox join error: {}", Error)),
42	}
43}