From 62eefeea0fe90c8ff33fbbab045dfe3ce96f11d8 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Wed, 27 Dec 2023 09:11:04 -0500 Subject: [PATCH] slow going --- Cargo.lock | 6 ++ Cargo.toml | 1 + src-lib/src/lib.rs | 31 +++++--- src-tauri/Cargo.toml | 1 + src-tauri/src/main.rs | 14 ++-- src/app.rs | 159 ++++++++++++++++++++++++++++-------------- 6 files changed, 145 insertions(+), 67 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 57ef8ba..7d9a83d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1875,6 +1875,10 @@ dependencies = [ "tracing", ] +[[package]] +name = "lib" +version = "0.1.0" + [[package]] name = "libc" version = "0.2.151" @@ -2237,6 +2241,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" name = "pa-home-video-blue-extractinator-2" version = "0.0.0" dependencies = [ + "lib", "serde", "serde_json", "tauri", @@ -2249,6 +2254,7 @@ version = "0.0.0" dependencies = [ "js-sys", "leptos", + "lib", "serde", "serde-wasm-bindgen 0.6.3", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index c399e35..776096a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +lib = { path = "./src-lib" } leptos = { version = "0.5", features = ["csr"] } serde = { version = "1.0", features = ["derive"] } serde-wasm-bindgen = "0.6" diff --git a/src-lib/src/lib.rs b/src-lib/src/lib.rs index a31391f..3fffcec 100644 --- a/src-lib/src/lib.rs +++ b/src-lib/src/lib.rs @@ -1,16 +1,25 @@ pub mod video; -pub fn add(left: usize, right: usize) -> usize { - left + right +pub fn analyze(file: &str) -> String { + match _analyze(file) { + Ok(result) => result, + Err(msg) => msg, + } } -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } +fn _analyze(file: &str) -> Result { + eprintln!("analyzing {}", file); + Err(format!("not impl")) +} + +pub fn clipify(file: &str) -> String { + match _clipify(file) { + Ok(result) => result, + Err(msg) => msg, + } +} + +fn _clipify(file: &str) -> Result { + eprintln!("clipifying {}", file); + Err(format!("not impl")) } diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 40ee852..a54d410 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -13,6 +13,7 @@ edition = "2021" tauri-build = { version = "1.5", features = [] } [dependencies] +lib = { path = "../src-lib" } tauri = { version = "1.5", features = ["shell-open"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 523550d..604bcc1 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,15 +1,21 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command +use lib; + #[tauri::command] -fn greet(name: &str) -> String { - format!("Hello, {}! You've been greeted from Rust!", name) +fn analyze(file: &str) -> String { + lib::analyze(file) +} + +#[tauri::command] +fn clipify(file: &str) -> String { + lib::clipify(file) } fn main() { tauri::Builder::default() - .invoke_handler(tauri::generate_handler![greet]) + .invoke_handler(tauri::generate_handler![analyze, clipify]) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/src/app.rs b/src/app.rs index 612c6a0..3608dd9 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,76 +1,131 @@ -use leptos::leptos_dom::ev::SubmitEvent; +use leptos::leptos_dom::ev; use leptos::*; use serde::{Deserialize, Serialize}; use serde_wasm_bindgen::to_value; use wasm_bindgen::prelude::*; +use lib; + #[wasm_bindgen] extern "C" { - #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "tauri"])] - async fn invoke(cmd: &str, args: JsValue) -> JsValue; + #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "tauri"])] + async fn invoke(cmd: &str, args: JsValue) -> JsValue; } #[derive(Serialize, Deserialize)] -struct GreetArgs<'a> { - name: &'a str, +struct Args<'a> { + file: &'a str, } #[component] pub fn App() -> impl IntoView { - let (name, set_name) = create_signal(String::new()); - let (greet_msg, set_greet_msg) = create_signal(String::new()); + let (file, set_file) = create_signal(String::new()); + let (err, set_err) = create_signal(String::new()); - let update_name = move |ev| { - let v = event_target_value(&ev); - set_name.set(v); - }; + let update_file = move |ev| { + let v = event_target_value(&ev); + set_file.set(v); + }; - let greet = move |ev: SubmitEvent| { - ev.prevent_default(); - spawn_local(async move { - if name.get().is_empty() { - return; - } + let (analyze_result, set_analyze_result) = create_signal(String::new()); + let (clipify_result, set_clipify_result) = create_signal(String::new()); - let args = to_value(&GreetArgs { name: &name.get() }).unwrap(); - // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command - let new_msg = invoke("greet", args).await.as_string().unwrap(); - set_greet_msg.set(new_msg); - }); - }; + let noop = move |ev: ev::SubmitEvent| { ev.prevent_default(); }; - view! { -
- + let analyze = move |ev: ev::MouseEvent| { + ev.prevent_default(); + spawn_local(async move { + if file.get_untracked().is_empty() { + return; + } -

"Click on the Tauri and Leptos logos to learn more."

+ let args = to_value(&Args { file: &file.get_untracked() }).unwrap(); + // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command + match invoke("analyze", args).await.as_string() { + Some(new_analyze_result) => set_analyze_result.set(new_analyze_result), + None => set_err.set("analyze result failed".to_string()), + }; + }); + }; -

- "Recommended IDE setup: " - "VS Code" - " + " - "Tauri" - " + " - "rust-analyzer" -

+ let clipify = move |ev: ev::MouseEvent| { + ev.prevent_default(); + spawn_local(async move { + if file.get_untracked().is_empty() { + return; + } -
- - + let args = to_value(&Args { file: &file.get_untracked() }).unwrap(); + // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command + match invoke("clipify", args).await.as_string() { + Some(new_clipify_result) => set_clipify_result.set(new_clipify_result), + None => set_err.set("clipify result failed".to_string()), + }; + }); + }; + + view! { +
+
+ + + + +
-

{ move || greet_msg.get() }

-
- } +
+

{ move || err.get() }

+
+ +
+
+
+

Analysis

+
+
+

{ move || analyze_result.get() }FOO

+
+
+
+ +
+
+
+

Clipified

+
+
+

{ move || clipify_result.get() }BAR

+
+
+
+ + /* +

"Click on the Tauri and Leptos logos to learn more."

+ +

+ "Recommended IDE setup: " + "VS Code" + " + " + "Tauri" + " + " + "rust-analyzer" +

+ +
+ + +
+ +

{ move || greet_msg.get() }

+ */ +
+ } }