Skip to main content

Mountain/IPC/WindAirCommands/
DownloadUpdate.rs

1
2//! `DownloadUpdate` Tauri command - hand off update-package
3//! download to Air, returning a `DownloadResultDTO::Struct`.
4
5use crate::{
6	IPC::WindAirCommands::{DownloadResultDTO, GetAirAddress, GetOrCreateAirClient},
7	dev_log,
8};
9
10#[tauri::command]
11pub async fn DownloadUpdate(
12	url:String,
13
14	destination:String,
15
16	checksum:Option<String>,
17) -> Result<DownloadResultDTO::Struct, String> {
18	dev_log!("grpc", "[WindAirCommands] DownloadUpdate called: {} -> {}", url, destination);
19
20	let air_address = GetAirAddress::Fn()?;
21
22	let client = GetOrCreateAirClient::Fn(air_address).await?;
23
24	let request_id = uuid::Uuid::new_v4().to_string();
25
26	let file_info = client
27		.download_update(
28			request_id,
29			url,
30			destination,
31			checksum.unwrap_or_default(),
32			std::collections::HashMap::new(),
33		)
34		.await
35		.map_err(|e| format!("Update download failed: {:?}", e))?;
36
37	let result = DownloadResultDTO::Struct {
38		success:true,
39
40		file_path:file_info.file_path,
41
42		file_size:file_info.file_size,
43
44		checksum:file_info.checksum,
45	};
46
47	dev_log!(
48		"grpc",
49		"[WindAirCommands] Update download completed: success={}",
50		result.success
51	);
52
53	Ok(result)
54}