Mountain/IPC/WindServiceHandlers/NativeHost/
ShowSaveDialogUI.rs1#![allow(unused_variables, dead_code, unused_imports)]
2
3use serde_json::{Value, json};
8use tauri::AppHandle;
9use tauri_plugin_dialog::DialogExt;
10
11pub async fn Fn(ApplicationHandle:AppHandle, Arguments:Vec<Value>) -> Result<Value, String> {
12 let Options = Arguments.first().cloned().unwrap_or(Value::Null);
13
14 let Title = Options.get("title").and_then(Value::as_str).unwrap_or("Save").to_string();
15
16 let DefaultPath = Options.get("defaultPath").and_then(Value::as_str).map(str::to_string);
17
18 let Handle = ApplicationHandle.clone();
19
20 let Joined = tokio::task::spawn_blocking(move || -> Option<String> {
21 let mut Builder = Handle.dialog().file().set_title(&Title);
22 if let Some(Path) = DefaultPath.as_deref() {
23 Builder = Builder.set_directory(Path);
24 }
25 Builder.blocking_save_file().map(|P| P.to_string())
26 })
27 .await;
28
29 match Joined {
30 Ok(Some(Path)) => Ok(json!(Path)),
31
32 Ok(None) => Ok(Value::Null),
33
34 Err(Error) => Err(format!("UserInterface.ShowSaveDialog join error: {}", Error)),
35 }
36}