diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 7ecb740..2dab8f0 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -26,6 +26,7 @@ pub struct EssentialsRepo { pub struct InstallTask { pub id: String, pub version: Option, + #[serde(default)] pub use_manifest: bool, pub manifest_url: Option, } @@ -168,13 +169,10 @@ async fn get_updates(app: AppHandle) -> Vec { #[tauri::command] async fn install_software( - id: String, - version: Option, - use_manifest: bool, - manifest_url: Option, + task: InstallTask, state: State<'_, AppState> ) -> Result<(), String> { - state.install_tx.send(InstallTask { id, version, use_manifest, manifest_url }).await.map_err(|e| e.to_string()) + state.install_tx.send(task).await.map_err(|e| e.to_string()) } #[tauri::command] @@ -345,6 +343,11 @@ pub fn run() { }); emit_log(&handle, &log_id, "Result", &format!("Execution finished: {}", status_result), if status_result == "success" { "success" } else { "error" }); + + // 3. 清理临时清单文件 + if let Some(path) = temp_manifest_path { + let _ = fs::remove_file(path); + } } }); diff --git a/src/store/software.ts b/src/store/software.ts index 942bcb5..7e59236 100644 --- a/src/store/software.ts +++ b/src/store/software.ts @@ -194,12 +194,19 @@ export const useSoftwareStore = defineStore('software', { const software = this.findSoftware(id) if (software) { software.status = 'pending'; - await invoke('install_software', { - id, - version: software.version, - use_manifest: software.use_manifest, - manifest_url: software.manifest_url - }) + try { + await invoke('install_software', { + task: { + id, + version: software.recommended_version || software.version, + use_manifest: software.use_manifest || false, + manifest_url: software.manifest_url || null + } + }) + } catch (err) { + console.error('Invoke install failed:', err); + software.status = 'error'; + } } }, findSoftware(id: string) {