Skip to main content

Mountain/IPC/WindAirCommands/
DownloadFile.rs

1#![allow(non_snake_case)]
2
3//! `DownloadFile` Tauri command - generic URL download routed
4//! through Air's download service.
5
6use crate::{
7	IPC::WindAirCommands::{DownloadResultDTO, GetAirAddress, GetOrCreateAirClient},
8	dev_log,
9};
10
11#[tauri::command]
12pub async fn DownloadFile(url:String, destination:String) -> Result<DownloadResultDTO::Struct, String> {
13	dev_log!("grpc", "[WindAirCommands] DownloadFile called: {} -> {}", url, destination);
14
15	let air_address = GetAirAddress::Fn()?;
16
17	let client = GetOrCreateAirClient::Fn(air_address).await?;
18
19	let request_id = uuid::Uuid::new_v4().to_string();
20
21	let file_info = client
22		.download_file(request_id, url, destination, String::new(), std::collections::HashMap::new())
23		.await
24		.map_err(|e| format!("File download failed: {:?}", e))?;
25
26	let result = DownloadResultDTO::Struct {
27		success:true,
28
29		file_path:file_info.file_path,
30
31		file_size:file_info.file_size,
32
33		checksum:file_info.checksum,
34	};
35
36	dev_log!("grpc", "[WindAirCommands] File download completed");
37
38	Ok(result)
39}