From 8b1c30a7463ddd3463eea1fd4613d4dfbc5f832d Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Wed, 12 Feb 2025 15:58:17 +0100 Subject: [PATCH] added websocket --- package.json | 1 + src-tauri/Cargo.lock | 73 +++++++++++++++++++++++++++++ src-tauri/Cargo.toml | 1 + src-tauri/capabilities/default.json | 3 +- src-tauri/src/lib.rs | 13 ++++- src/components/PrimitiveView.svelte | 68 ++++++++++++++------------- src/components/TitleBar.svelte | 2 +- yarn.lock | 7 +++ 8 files changed, 132 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 576b92f..54da91f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@tauri-apps/plugin-dialog": "~2", "@tauri-apps/plugin-fs": "~2", "@tauri-apps/plugin-opener": "^2", + "@tauri-apps/plugin-websocket": "~2", "async-mutex": "^0.5.0", "flowbite-svelte": "^0.47.4", "flowbite-svelte-icons": "^2.0.2", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 77d4904..7ce2a1e 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1011,6 +1011,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728" +[[package]] +name = "data-encoding" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" + [[package]] name = "datasize" version = "0.2.15" @@ -3696,6 +3702,7 @@ dependencies = [ "tauri-plugin-dialog", "tauri-plugin-fs", "tauri-plugin-opener", + "tauri-plugin-websocket", "uuid", ] @@ -4813,6 +4820,17 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.8" @@ -5352,6 +5370,25 @@ dependencies = [ "zbus", ] +[[package]] +name = "tauri-plugin-websocket" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af3ac71aec5fb0ae5441e830cd075b1cbed49ac3d39cb975a4894ea8fa2e62b9" +dependencies = [ + "futures-util", + "http", + "log", + "rand 0.8.5", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.11", + "tokio", + "tokio-tungstenite", +] + [[package]] name = "tauri-runtime" version = "2.3.0" @@ -5609,6 +5646,22 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-tungstenite" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4bf6fecd69fcdede0ec680aaf474cdab988f9de6bc73d3758f0160e3b7025a" +dependencies = [ + "futures-util", + "log", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots", +] + [[package]] name = "tokio-util" version = "0.7.13" @@ -5777,6 +5830,26 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413083a99c579593656008130e29255e54dcaae495be556cc26888f211648c24" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "rustls", + "rustls-pki-types", + "sha1", + "thiserror 2.0.11", + "utf-8", +] + [[package]] name = "tuple" version = "0.5.2" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 3a0ea59..685443e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -34,3 +34,4 @@ image = { version = "0.25.5", features = ["jpeg"] } pdf_render = { path = "../../pdf-render/render" } pathfinder_rasterize = { git = "https://github.com/s3bk/pathfinder_rasterizer" } pathfinder_geometry = { git = "https://github.com/servo/pathfinder" } +tauri-plugin-websocket = "2" diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 201f411..8e150bc 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -15,6 +15,7 @@ "core:window:allow-close", "core:window:allow-minimize", "core:window:allow-toggle-maximize", - "core:window:allow-internal-toggle-maximize" + "core:window:allow-internal-toggle-maximize", + "websocket:default" ] } \ No newline at end of file diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 19c8f6c..c36fed6 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -229,7 +229,11 @@ fn encode_b64(img: RgbImage) -> Result { } #[tauri::command] -async fn get_stream_data_as_image(id: &str, path: &str, session: State<'_, Session>,) -> Result { +async fn get_stream_data_as_image( + id: &str, + path: &str, + session: State<'_, Session>, +) -> Result { use base64::prelude::*; let file = session.get_file(id)?; @@ -238,7 +242,11 @@ async fn get_stream_data_as_image(id: &str, path: &str, session: State<'_, Sessi } #[tauri::command] -async fn get_page_by_num(id: &str, num: u32, session: State<'_, Session>) -> Result { +async fn get_page_by_num( + id: &str, + num: u32, + session: State<'_, Session>, +) -> Result { let file = session.get_file(id)?; let mut renderer = Renderer::new(&file.cos_file, 150); let img = renderer.render(num)?; @@ -762,6 +770,7 @@ impl Session { #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() + .plugin(tauri_plugin_websocket::init()) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_opener::init()) diff --git a/src/components/PrimitiveView.svelte b/src/components/PrimitiveView.svelte index de34bdd..0a11bab 100644 --- a/src/components/PrimitiveView.svelte +++ b/src/components/PrimitiveView.svelte @@ -6,8 +6,8 @@ import StreamDataView from "./StreamDataView.svelte"; const cellH = 29; - const headerOffset = 0; - let {fState, height}: { fState: FileViewState; height: number } = + const headerOffset = 24; + let { fState, height }: { fState: FileViewState; height: number } = $props(); let fillerHeight: number = $state(0); let firstEntry = $state(0); @@ -19,8 +19,10 @@ ); let tableHeight = $derived(prim ? prim.children.length * cellH : 0); - let bodyHeight = $derived(height - headerOffset); - let editorHeight = $derived(Math.max(800, bodyHeight - tableHeight)); + let bodyHeight = $derived(height); + let editorHeight = $derived( + Math.max(800, bodyHeight - tableHeight - headerOffset), + ); let locallySelected: Primitive | undefined = $state(undefined); $effect(() => { @@ -50,46 +52,48 @@ {#if prim && prim.children && prim.children.length > 0} -
+
- - - - - + + + + +
KeyTypeValue
KeyTypeValue
- - {#each entriesToDisplay as entry} - + {#each entriesToDisplay as entry} + handlePrimClick(entry)} ondblclick={() => handlePrimDbLClick(entry)} - > - - - - - {/each} + + + + + {/each}
-
- -

- {entry.key} -

-
-
{entry.ptype}{entry.value}
+
+ +

+ {entry.key} +

+
+
{entry.ptype}{entry.value}
diff --git a/src/components/TitleBar.svelte b/src/components/TitleBar.svelte index dd572f8..a5b8c2e 100644 --- a/src/components/TitleBar.svelte +++ b/src/components/TitleBar.svelte @@ -122,7 +122,7 @@ ? formatFileName(fState.file.name) : "Select File"} - + {#if dropdownVisible} diff --git a/yarn.lock b/yarn.lock index c919ee6..3b8598f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -515,6 +515,13 @@ dependencies: "@tauri-apps/api" "^2.0.0" +"@tauri-apps/plugin-websocket@~2": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-websocket/-/plugin-websocket-2.3.0.tgz#7b7c69db52828aee8ad0efd3cbd684f593ef7e07" + integrity sha512-eAwRGe3tnqDeQYE0wq4g1PUKbam9tYvlC4uP/au12Y/z7MP4lrS4ylv+aoZ5Ly+hTlBdi7hDkhHomwF/UeBesA== + dependencies: + "@tauri-apps/api" "^2.0.0" + "@types/cookie@^0.6.0": version "0.6.0" resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz"