Skip to main content

Mountain/IPC/WindAirCommands/
DownloadUpdate.rs

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