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	destination:String,
15	checksum:Option<String>,
16) -> Result<DownloadResultDTO::Struct, String> {
17	dev_log!("grpc", "[WindAirCommands] DownloadUpdate called: {} -> {}", url, destination);
18
19	let air_address = GetAirAddress::Fn()?;
20	let client = GetOrCreateAirClient::Fn(air_address).await?;
21
22	let request_id = uuid::Uuid::new_v4().to_string();
23
24	let file_info = client
25		.download_update(
26			request_id,
27			url,
28			destination,
29			checksum.unwrap_or_default(),
30			std::collections::HashMap::new(),
31		)
32		.await
33		.map_err(|e| format!("Update download failed: {:?}", e))?;
34
35	let result = DownloadResultDTO::Struct {
36		success:true,
37		file_path:file_info.file_path,
38		file_size:file_info.file_size,
39		checksum:file_info.checksum,
40	};
41
42	dev_log!(
43		"grpc",
44		"[WindAirCommands] Update download completed: success={}",
45		result.success
46	);
47	Ok(result)
48}