diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 7794809..7ecb740 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -218,12 +218,39 @@ pub fn run() { let mut args = vec!["install".to_string()]; let display_cmd: String; + let mut temp_manifest_path: Option = None; if use_manifest && manifest_url.is_some() { let url = manifest_url.unwrap(); - args.push("--manifest".to_string()); - args.push(url.clone()); display_cmd = format!("Winget Install (Manifest): {} from {}", task_id, url); + emit_log(&handle, &log_id, &display_cmd, "Downloading remote manifest...", "info"); + + let client = reqwest::Client::new(); + match client.get(&url).timeout(std::time::Duration::from_secs(15)).send().await { + Ok(resp) if resp.status().is_success() => { + if let Ok(content) = resp.text().await { + let temp_dir = std::env::temp_dir(); + let file_name = format!("winget_tmp_{}.yaml", chrono::Local::now().timestamp_millis()); + let local_path = temp_dir.join(file_name); + if fs::write(&local_path, content).is_ok() { + args.push("--manifest".to_string()); + args.push(local_path.to_string_lossy().to_string()); + temp_manifest_path = Some(local_path); + } + } + } + _ => {} + } + + if temp_manifest_path.is_none() { + emit_log(&handle, &log_id, "Error", "Failed to download or save manifest.", "error"); + let _ = handle.emit("install-status", InstallProgress { + id: task_id.clone(), + status: "error".to_string(), + progress: 0.0, + }); + continue; + } } else { args.push("--id".to_string()); args.push(task_id.clone());