diff --git a/Cargo.lock b/Cargo.lock index 94f63148..ca4d1d4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2759,6 +2759,7 @@ dependencies = [ "installer", "serde", "serde_json", + "shlex", "tauri", "tauri-build", "tauri-plugin-opener", diff --git a/installer-gui/src-tauri/Cargo.toml b/installer-gui/src-tauri/Cargo.toml index 4e849d8f..2d26f67b 100644 --- a/installer-gui/src-tauri/Cargo.toml +++ b/installer-gui/src-tauri/Cargo.toml @@ -21,4 +21,5 @@ tauri-plugin-opener = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" anyhow = "1.0.100" +shlex = "1" installer = { path = "../../installer" } diff --git a/installer-gui/src-tauri/src/lib.rs b/installer-gui/src-tauri/src/lib.rs index 4e2b6354..da3da7b4 100644 --- a/installer-gui/src-tauri/src/lib.rs +++ b/installer-gui/src-tauri/src/lib.rs @@ -1,10 +1,11 @@ +use anyhow::Context; use tauri::Emitter; async fn run_installer(app_handle: tauri::AppHandle, args: String) -> anyhow::Result<()> { + let args_vec = shlex::split(&args).context("Failed to parse arguments: unclosed quote")?; tauri::async_runtime::spawn_blocking(move || { installer::run_with_callback( - // TODO: we should split using something similar to shlex in python - args.split_whitespace(), + args_vec.iter().map(|s| s.as_str()), Some(Box::new(move |output| { app_handle .emit("installer-output", output) diff --git a/installer-gui/src/routes/+page.svelte b/installer-gui/src/routes/+page.svelte index f5e9fb9c..d525ad0f 100644 --- a/installer-gui/src/routes/+page.svelte +++ b/installer-gui/src/routes/+page.svelte @@ -81,6 +81,9 @@