Skip to main content

Mountain/IPC/WindServiceHandler/
Progress.rs

1#![allow(non_snake_case)]
2
3//! Progress domain handlers for Wind IPC.
4
5use serde_json::{Value, json};
6use tauri::AppHandle;
7
8/// Begin a window-level or status-bar progress indicator.
9pub async fn handle_progress_begin(AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
10	use tauri::Emitter;
11
12	let Location = Args.first().and_then(|V| V.as_str()).unwrap_or("notification").to_string();
13	let Title = Args.get(1).and_then(|V| V.as_str()).unwrap_or("").to_string();
14	let Cancellable = Args.get(2).and_then(|V| V.as_bool()).unwrap_or(false);
15
16	let Id = format!(
17		"progress-{}",
18		std::time::SystemTime::now()
19			.duration_since(std::time::UNIX_EPOCH)
20			.map(|D| D.as_millis())
21			.unwrap_or(0)
22	);
23
24	let _ = AppHandle.emit(
25		"sky://progress/begin",
26		json!({
27			"id": Id,
28			"location": Location,
29			"title": Title,
30			"cancellable": Cancellable,
31		}),
32	);
33
34	Ok(json!(Id))
35}
36
37/// Report incremental progress on an active indicator.
38pub async fn handle_progress_report(AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
39	use tauri::Emitter;
40
41	let Id = Args.first().and_then(|V| V.as_str()).unwrap_or("").to_string();
42	let Increment = Args.get(1).and_then(|V| V.as_f64()).unwrap_or(0.0);
43	let Message = Args.get(2).and_then(|V| V.as_str()).unwrap_or("").to_string();
44
45	let _ = AppHandle.emit(
46		"sky://progress/report",
47		json!({
48			"id": Id,
49			"increment": Increment,
50			"message": Message,
51		}),
52	);
53
54	Ok(Value::Null)
55}
56
57/// End a progress indicator.
58pub async fn handle_progress_end(AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
59	use tauri::Emitter;
60
61	let Id = Args.first().and_then(|V| V.as_str()).unwrap_or("").to_string();
62
63	let _ = AppHandle.emit("sky://progress/end", json!({ "id": Id }));
64
65	Ok(Value::Null)
66}