diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 730e9e0..a8bd263 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -74,6 +74,8 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b22517ee647547c01a687cf9b76074e1c91334032a4324f7243c6ee0f949390" dependencies = [ + "async-fs", + "async-net", "enumflags2", "futures-channel", "futures-util", @@ -110,6 +112,31 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-executor" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +dependencies = [ + "async-lock 3.3.0", + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc19683171f287921f2405677dd2ed2549c3b3bda697a563ebc3a121ace2aba1" +dependencies = [ + "async-lock 3.3.0", + "blocking", + "futures-lite", +] + [[package]] name = "async-io" version = "2.3.1" @@ -149,6 +176,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + [[package]] name = "async-process" version = "2.1.0" @@ -1652,6 +1690,7 @@ name = "harmony-vpk-tool" version = "0.0.0" dependencies = [ "rayon", + "rfd", "serde", "serde_json", "sourcepak", @@ -2716,6 +2755,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "pollster" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" + [[package]] name = "powerfmt" version = "0.2.0" @@ -3051,7 +3096,9 @@ dependencies = [ "objc", "objc-foundation", "objc_id", + "pollster", "raw-window-handle 0.6.0", + "urlencoding", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -3794,8 +3841,7 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" version = "2.0.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ed2ac81ffb8fd76d854578784491bbf8d8baba274fa9e18c0bbdc4ba00b0013" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#99bea2559c2c0648c2519c50a18cd124dacef57b" dependencies = [ "glib 0.16.9", "log", @@ -3812,8 +3858,7 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" version = "2.0.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a556b50d761ec405087bf67e82b3936ddeaf39d4d602a443e2a0d2df6cdb2a" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#99bea2559c2c0648c2519c50a18cd124dacef57b" dependencies = [ "anyhow", "glob", @@ -5091,9 +5136,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9ff46f2a25abd690ed072054733e0bc3157e3d4c45f41bd183dce09c2ff8ab9" dependencies = [ "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock 3.3.0", "async-process", "async-recursion", + "async-task", "async-trait", + "blocking", "derivative", "enumflags2", "event-listener 5.2.0", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index b590e28..7181732 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -20,6 +20,7 @@ rayon = "1.8.1" tauri-plugin-dialog = "2.0.0-beta.1" tauri-plugin-shell = "2.0.0-beta.1" tauri-plugin-os = "2.0.0-beta.1" +rfd = "0.14.0" [profile.release] strip = true diff --git a/src-tauri/capabilities/migrated.json b/src-tauri/capabilities/migrated.json index a2f07db..4c64ebb 100644 --- a/src-tauri/capabilities/migrated.json +++ b/src-tauri/capabilities/migrated.json @@ -26,9 +26,6 @@ ], "platforms": [ "linux", - "macOS", - "windows", - "android", - "iOS" + "windows" ] } \ No newline at end of file diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json index cfe436a..617ba46 100644 --- a/src-tauri/gen/schemas/capabilities.json +++ b/src-tauri/gen/schemas/capabilities.json @@ -1 +1 @@ -{"migrated":{"identifier":"migrated","description":"permissions that were migrated from v1","local":true,"windows":["main"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","shell:allow-open","dialog:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname"],"platforms":["linux","macOS","windows","android","iOS"]}} \ No newline at end of file +{"migrated":{"identifier":"migrated","description":"permissions that were migrated from v1","local":true,"windows":["main"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","shell:allow-open","dialog:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname"],"platforms":["linux","windows"]}} \ No newline at end of file diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 1bb2783..b06922b 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,6 +2,7 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use rayon::prelude::*; +use rfd::AsyncFileDialog; use serde::Serialize; use sourcepak::common::format::PakReader; use sourcepak::pak::v1::format::VPKVersion1; @@ -65,6 +66,26 @@ impl ExtractState { } } +#[tauri::command] +async fn select_vpk( + window: Window, + state: tauri::State<'_, AppState>, +) -> Result, String> { + let file = AsyncFileDialog::new() + .set_parent(&window) + .set_title("Select a VPK file") + .add_filter("VPK Files", &["vpk"]) + .pick_file() + .await; + + match file { + Some(vpk_file) => { + Ok(Some(vpk_file.path().to_str().ok_or("Invalid path")?.to_string())) + } + None => Ok(None), + } +} + #[tauri::command] async fn load_vpk(state: tauri::State<'_, AppState>, vpk_path: String) -> Result<(), String> { let mut file = File::open(&vpk_path).expect("Failed to open file"); @@ -954,6 +975,7 @@ fn main() { .plugin(tauri_plugin_dialog::init()) .manage(AppState::new()) .invoke_handler(tauri::generate_handler![ + select_vpk, load_vpk, get_file_list, get_file_entry, diff --git a/src/stores/main.ts b/src/stores/main.ts index 5d51eda..50c41eb 100644 --- a/src/stores/main.ts +++ b/src/stores/main.ts @@ -30,7 +30,7 @@ export const useStore = defineStore('main', () => { try { await invoke('load_vpk', { vpkPath: path }); - getFiles(); + await getFiles(); loading.value = false; loaded.value = true; hasError.value = false; @@ -44,9 +44,13 @@ export const useStore = defineStore('main', () => { } async function openVPK() { - let res = await open({ title: 'Select a VPK file', filters: [{ name: 'VPK files', extensions: ['vpk'] }], multiple: false }) - if (res !== null) { - loadFromPath(res.path); + try { + let path = await invoke('select_vpk'); + if (path !== null) { + loadFromPath(path); + } + } catch (e: any) { + console.error(e); } }