From 5723985f6a38041ab0c6ac6ca21f3b5a21a42b92 Mon Sep 17 00:00:00 2001 From: Rob Watson Date: Thu, 17 Sep 2020 15:34:38 +0200 Subject: [PATCH] WIP: experiment with passing data between Rust wasm modules --- frontend/core/Cargo.toml | 1 + .../core/src/components/waveform/container.rs | 15 ++++++++++++--- frontend/core/src/lib.rs | 7 ------- frontend/core/static/player.js | 4 ++++ frontend/player/Cargo.toml | 6 ++++++ frontend/player/src/lib.rs | 15 +++++++++++++++ 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/frontend/core/Cargo.toml b/frontend/core/Cargo.toml index 17845e9..25fae77 100644 --- a/frontend/core/Cargo.toml +++ b/frontend/core/Cargo.toml @@ -28,5 +28,6 @@ features = [ "HtmlCanvasElement", "CanvasRenderingContext2d", "Window", + "File", ] diff --git a/frontend/core/src/components/waveform/container.rs b/frontend/core/src/components/waveform/container.rs index 361166a..cd47be8 100644 --- a/frontend/core/src/components/waveform/container.rs +++ b/frontend/core/src/components/waveform/container.rs @@ -1,10 +1,18 @@ use super::canvas::Canvas; use crate::agents::audio_agent::{self, AudioAgent}; use crate::components::Player; -use web_sys::HtmlInputElement; +use web_sys::{File, HtmlInputElement}; use yew::agent::Dispatcher; use yew::prelude::*; use yew::services::ConsoleService; +use wasm_bindgen::prelude::*; +use weblog::*; + +#[wasm_bindgen(module = "/static/player.js")] +extern "C" { + fn get_val() -> i32; + fn load_file(file: &str) -> i32; +} pub struct Container { link: ComponentLink, @@ -88,8 +96,9 @@ impl Container { let file_list = file_input.files().ok_or("could not get file list")?; let file = file_list.get(0).ok_or("could not get file")?; - self.audio_agent - .send(audio_agent::Request::LoadSamplesFromFile(file)); + load_file("oh!"); + + console_log!("Done."); Ok(()) } diff --git a/frontend/core/src/lib.rs b/frontend/core/src/lib.rs index 67b9d01..a0ab786 100644 --- a/frontend/core/src/lib.rs +++ b/frontend/core/src/lib.rs @@ -12,17 +12,10 @@ mod agents; mod components; mod utils; -#[wasm_bindgen(module = "/static/player.js")] -extern "C" { - fn get_val() -> i32; -} - #[wasm_bindgen(start)] pub fn run_app() { #[cfg(debug_assertions)] panic::set_hook(Box::new(console_error_panic_hook::hook)); - console_log!("Get value from player module:", get_val()); - App::::new().mount_to_body(); } diff --git a/frontend/core/static/player.js b/frontend/core/static/player.js index b103b92..5ce0463 100644 --- a/frontend/core/static/player.js +++ b/frontend/core/static/player.js @@ -27,4 +27,8 @@ export function get_val() { return wasmModule.get_val(); } +export function load_file(f) { + return wasmModule.load_file(f); +} + init(); diff --git a/frontend/player/Cargo.toml b/frontend/player/Cargo.toml index 0e06423..e6c9c75 100644 --- a/frontend/player/Cargo.toml +++ b/frontend/player/Cargo.toml @@ -10,3 +10,9 @@ crate-type = ["cdylib"] [dependencies] wasm-bindgen = { version = "0.2" } +lazy_static = "1.4.0" +weblog = "0.2" + +[dependencies.web-sys] +version = "0.3.44" +features = ["File"] diff --git a/frontend/player/src/lib.rs b/frontend/player/src/lib.rs index d11b7fb..5f65ed4 100644 --- a/frontend/player/src/lib.rs +++ b/frontend/player/src/lib.rs @@ -1,6 +1,21 @@ +#[macro_use] +extern crate lazy_static; + use wasm_bindgen::prelude::*; +use web_sys::File; +use weblog::*; + +lazy_static! { + static ref BUFFER: Vec = vec![]; +} #[wasm_bindgen] pub fn get_val() -> i32 { 123 } + +#[wasm_bindgen] +pub fn load_file(file_element_id: &str) -> i32 { + console_log!("Got file:", file_element_id); + 0 +}