added websocket
This commit is contained in:
parent
4b20d20783
commit
8b1c30a746
@ -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",
|
||||
|
||||
73
src-tauri/Cargo.lock
generated
73
src-tauri/Cargo.lock
generated
@ -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"
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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"
|
||||
]
|
||||
}
|
||||
@ -229,7 +229,11 @@ fn encode_b64(img: RgbImage) -> Result<String, String> {
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn get_stream_data_as_image(id: &str, path: &str, session: State<'_, Session>,) -> Result<String, String> {
|
||||
async fn get_stream_data_as_image(
|
||||
id: &str,
|
||||
path: &str,
|
||||
session: State<'_, Session>,
|
||||
) -> Result<String, String> {
|
||||
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<String, String> {
|
||||
async fn get_page_by_num(
|
||||
id: &str,
|
||||
num: u32,
|
||||
session: State<'_, Session>,
|
||||
) -> Result<String, String> {
|
||||
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())
|
||||
|
||||
@ -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 @@
|
||||
</script>
|
||||
|
||||
{#if prim && prim.children && prim.children.length > 0}
|
||||
<div class="overflow-auto" onscroll={handleScroll}
|
||||
style="height: {bodyHeight}px">
|
||||
<div
|
||||
class="overflow-auto"
|
||||
onscroll={handleScroll}
|
||||
style="height: {bodyHeight}px"
|
||||
>
|
||||
<div class="w-[851px]">
|
||||
<table style="position: relative; top: {scrollY}px">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="page-cell t-header border-forge-prim">Key</td>
|
||||
<td class="ref-cell t-header border-forge-prim">Type</td>
|
||||
<td class="cell t-header border-forge-sec">Value</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="page-cell t-header border-forge-prim">Key</td
|
||||
>
|
||||
<td class="ref-cell t-header border-forge-prim">Type</td
|
||||
>
|
||||
<td class="cell t-header border-forge-sec">Value</td>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<div class="container" style="height: {tableHeight}px">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="filler" style="height: {fillerHeight}px"
|
||||
></tr>
|
||||
{#each entriesToDisplay as entry}
|
||||
<tr
|
||||
class:selected={entry.key === locallySelected?.key}
|
||||
<tr class="filler" style="height: {fillerHeight}px"
|
||||
></tr>
|
||||
{#each entriesToDisplay as entry}
|
||||
<tr
|
||||
class:selected={entry.key ===
|
||||
locallySelected?.key}
|
||||
class="row"
|
||||
onclick={() => handlePrimClick(entry)}
|
||||
ondblclick={() => handlePrimDbLClick(entry)}
|
||||
>
|
||||
<td class="page-cell t-data">
|
||||
<div class="key-field">
|
||||
<PrimitiveIcon
|
||||
ptype={entry.ptype}
|
||||
/>
|
||||
<p class="text-left">
|
||||
{entry.key}
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
<td class="ref-cell t-data"
|
||||
>{entry.ptype}</td
|
||||
>
|
||||
<td class="cell t-data">{entry.value}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
<td class="page-cell t-data">
|
||||
<div class="key-field">
|
||||
<PrimitiveIcon ptype={entry.ptype} />
|
||||
<p class="text-left">
|
||||
{entry.key}
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
<td class="ref-cell t-data">{entry.ptype}</td>
|
||||
<td class="cell t-data">{entry.value}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@ -122,7 +122,7 @@
|
||||
? formatFileName(fState.file.name)
|
||||
: "Select File"}</span
|
||||
>
|
||||
<CaretDownOutline class="ml-1" size="xs" />
|
||||
<CaretDownOutline class="ml-1 text-forge-text_sec" size="sm" />
|
||||
</button>
|
||||
|
||||
{#if dropdownVisible}
|
||||
|
||||
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user