Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindAirCommands/
DownloadFile.rs

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