From 4f4d5648a29b12da4e52062d61f8abffe1971d3b Mon Sep 17 00:00:00 2001 From: Helma <293536528+helmaski@users.noreply.github.com> Date: Mon, 15 Jun 2026 14:13:00 +0200 Subject: [PATCH 1/3] refactor(ipc): handle progress FileEvent notification --- src-tauri/Cargo.lock | 4 ++-- src-tauri/Cargo.toml | 2 +- src-tauri/src/commands.rs | 27 +++++++++++++++++++++++++++ src/lib/BlobTable.svelte | 12 +++++++++++- src/lib/ReceivePanel.svelte | 34 +++++++++++++++++++++++++++++++--- src/lib/RemotePanel.svelte | 16 +++++++++++++++- src/lib/types.ts | 6 ++++++ 7 files changed, 93 insertions(+), 8 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 97df3d5..e6f7684 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5071,9 +5071,9 @@ dependencies = [ [[package]] name = "ringdrop" -version = "0.14.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659eb22bb40980a969b3ac8e4a02d6c267b18fb471fa4578bd472e8b5bc0c9bf" +checksum = "fde5356c5011f46ee4150dcc5770d8054563c279b3c5b14ddc85cbfbd71dddba" dependencies = [ "anyhow", "bao-tree", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index ce3eb5f..f5be487 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -21,5 +21,5 @@ tauri-plugin-dialog = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" dirs = "5" -ringdrop = "0.14.1" +ringdrop = "0.15.0" diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index dc1bcbd..5105416 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -35,6 +35,15 @@ pub struct BlobRow { pub rings: Vec, /// `rdrop://…` share ticket. pub ticket: String, + /// Human-readable kind string, e.g. `"file"` or `"dir, 3 files"`. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// Number of files in a directory blob (`HashSeq`), if known. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub file_count: Option, + /// Total size in bytes, if known. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub size_bytes: Option, } /// Result returned after a successful import. @@ -403,6 +412,24 @@ pub async fn receive( serde_json::json!({ "done": done, "total": total }), ); } + EventKind::FileProgress { + file_index, + file_total, + ref file_name, + done, + total, + } => { + let _ = app.emit( + &format!("transfer_progress/{hash}"), + serde_json::json!({ + "done": done, + "total": total, + "file_index": file_index, + "file_total": file_total, + "file_name": file_name, + }), + ); + } // DaemonClient::send delivers Error through the callback and // still returns Ok(()), so we must capture it manually. EventKind::Error { message } => recv_error = Some(message), diff --git a/src/lib/BlobTable.svelte b/src/lib/BlobTable.svelte index c9294c6..5f4e1df 100644 --- a/src/lib/BlobTable.svelte +++ b/src/lib/BlobTable.svelte @@ -1,6 +1,7 @@