From b2055ff22dc92699c4e00f82b1ca155b3ba39d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kav=C3=ADk?= Date: Sun, 7 Jul 2024 14:53:30 +0200 Subject: [PATCH] remove_all_decoders --- frontend/src/platform.rs | 5 +++++ frontend/src/platform/browser.rs | 6 ++++++ frontend/src/platform/tauri.rs | 8 ++++++++ frontend/src/script_bridge.rs | 6 ++++++ frontend/typescript/bundles/tauri_glue.js | 4 ++++ frontend/typescript/tauri_glue/tauri_glue.ts | 5 +++++ src-tauri/src/component_manager.rs | 6 +++++- src-tauri/src/lib.rs | 7 +++++++ 8 files changed, 46 insertions(+), 1 deletion(-) diff --git a/frontend/src/platform.rs b/frontend/src/platform.rs index 4f1cad4..ca5a818 100644 --- a/frontend/src/platform.rs +++ b/frontend/src/platform.rs @@ -16,6 +16,7 @@ use browser as platform; type Filename = String; type JavascriptCode = String; type AddedDecodersCount = usize; +type RemovedDecodersCount = usize; type DecoderPath = String; pub async fn show_window() { @@ -64,3 +65,7 @@ pub async fn unload_signal(signal_ref: wellen::SignalRef) { pub async fn add_decoders(decoder_paths: Vec) -> AddedDecodersCount { platform::add_decoders(decoder_paths).await } + +pub async fn remove_all_decoders() -> RemovedDecodersCount { + platform::remove_all_decoders().await +} diff --git a/frontend/src/platform/browser.rs b/frontend/src/platform/browser.rs index c4eb9b5..0f6b7d7 100644 --- a/frontend/src/platform/browser.rs +++ b/frontend/src/platform/browser.rs @@ -128,3 +128,9 @@ pub(super) async fn add_decoders( eprintln!("Adding decoders is not supported in the browser."); 0 } + +pub(super) async fn remove_all_decoders() -> super::RemovedDecodersCount { + // @TODO error message for user + eprintln!("Removing decoders is not supported in the browser."); + 0 +} diff --git a/frontend/src/platform/tauri.rs b/frontend/src/platform/tauri.rs index 4e65e4b..b55ffef 100644 --- a/frontend/src/platform/tauri.rs +++ b/frontend/src/platform/tauri.rs @@ -63,6 +63,11 @@ pub(super) async fn add_decoders( .unwrap_throw() } +pub(super) async fn remove_all_decoders() -> super::RemovedDecodersCount { + serde_wasm_bindgen::from_value(tauri_glue::remove_all_decoders().await.unwrap_throw()) + .unwrap_throw() +} + mod tauri_glue { use zoon::*; @@ -98,5 +103,8 @@ mod tauri_glue { pub async fn add_decoders( decoder_paths: Vec, ) -> Result; + + #[wasm_bindgen(catch)] + pub async fn remove_all_decoders() -> Result; } } diff --git a/frontend/src/script_bridge.rs b/frontend/src/script_bridge.rs index 4b2b88e..183fad1 100644 --- a/frontend/src/script_bridge.rs +++ b/frontend/src/script_bridge.rs @@ -4,6 +4,7 @@ use zoon::*; type FullVarName = String; type AddedDecodersCount = usize; +type RemovedDecodersCount = usize; type DecoderPath = String; #[wasm_bindgen(module = "/typescript/bundles/strict_eval.js")] @@ -72,4 +73,9 @@ impl FW { pub async fn add_decoders(decoder_paths: Vec) -> AddedDecodersCount { platform::add_decoders(decoder_paths).await } + + /// JS: `FW.remove_all_decoders()` -> `5` + pub async fn remove_all_decoders() -> RemovedDecodersCount { + platform::remove_all_decoders().await + } } diff --git a/frontend/typescript/bundles/tauri_glue.js b/frontend/typescript/bundles/tauri_glue.js index 34be301..9fae877 100644 --- a/frontend/typescript/bundles/tauri_glue.js +++ b/frontend/typescript/bundles/tauri_glue.js @@ -2539,12 +2539,16 @@ async function unload_signal(signal_ref_index) { async function add_decoders(decoder_paths) { return await invoke2("add_decoders", { decoder_paths }); } +async function remove_all_decoders() { + return await invoke2("remove_all_decoders"); +} export { add_decoders, get_hierarchy, load_file_with_selected_vars, load_signal_and_get_timeline, pick_and_load_waveform, + remove_all_decoders, show_window, unload_signal }; diff --git a/frontend/typescript/tauri_glue/tauri_glue.ts b/frontend/typescript/tauri_glue/tauri_glue.ts index 9856a6f..8db7f81 100644 --- a/frontend/typescript/tauri_glue/tauri_glue.ts +++ b/frontend/typescript/tauri_glue/tauri_glue.ts @@ -10,6 +10,7 @@ type WellenHierarchy = unknown; type Timeline = unknown; type VarFormat = unknown; type AddedDecodersCount = number; +type RemovedDecodersCount = number; type DecoderPath = string; export async function show_window(): Promise { @@ -53,3 +54,7 @@ export async function unload_signal(signal_ref_index: number): Promise { export async function add_decoders(decoder_paths: Array): Promise { return await invoke("add_decoders", { decoder_paths }); } + +export async function remove_all_decoders(): Promise { + return await invoke("remove_all_decoders"); +} diff --git a/src-tauri/src/component_manager.rs b/src-tauri/src/component_manager.rs index 821c520..942bcb1 100644 --- a/src-tauri/src/component_manager.rs +++ b/src-tauri/src/component_manager.rs @@ -1,4 +1,4 @@ -use crate::{AddedDecodersCount, DecoderPath}; +use crate::{AddedDecodersCount, DecoderPath, RemovedDecodersCount}; use wasmtime::component::{Component as WasmtimeComponent, *}; use wasmtime::{Engine, Store}; use wasmtime_wasi::{WasiCtx, WasiView}; @@ -25,6 +25,10 @@ impl component::decoder::host::Host for State { } } +pub fn remove_all_decoders() -> RemovedDecodersCount { + 156 +} + // @TODO Make println work on Windows? // https://github.com/tauri-apps/tauri/discussions/8626 diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index fa2bda8..9e07f01 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -6,6 +6,7 @@ use wellen::simple::Waveform; type Filename = String; type JavascriptCode = String; type AddedDecodersCount = usize; +type RemovedDecodersCount = usize; type DecoderPath = String; mod component_manager; @@ -100,6 +101,11 @@ async fn add_decoders(decoder_paths: Vec) -> Result Result { + Ok(component_manager::remove_all_decoders()) +} + #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { // https://github.com/tauri-apps/tauri/issues/8462 @@ -119,6 +125,7 @@ pub fn run() { load_signal_and_get_timeline, unload_signal, add_decoders, + remove_all_decoders, ]) .run(tauri::generate_context!()) .expect("error while running tauri application");