Almost completed sender

This commit is contained in:
ikeen0807 2024-05-15 21:01:33 +02:00
parent 1f355a5d3e
commit 96340622d8
11 changed files with 666 additions and 52 deletions

501
Cargo.lock generated
View file

@ -155,6 +155,127 @@ version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
[[package]]
name = "ashpd"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093"
dependencies = [
"enumflags2",
"futures-channel",
"futures-util",
"rand 0.8.5",
"serde",
"serde_repr",
"tokio",
"url",
"zbus",
]
[[package]]
name = "async-broadcast"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb"
dependencies = [
"event-listener 5.3.0",
"event-listener-strategy 0.5.2",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-channel"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f2776ead772134d55b62dd45e59a79e21612d85d0af729b8b7d3967d601a62a"
dependencies = [
"concurrent-queue",
"event-listener 5.3.0",
"event-listener-strategy 0.5.2",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-io"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884"
dependencies = [
"async-lock",
"cfg-if",
"concurrent-queue",
"futures-io",
"futures-lite",
"parking",
"polling",
"rustix",
"slab",
"tracing",
"windows-sys 0.52.0",
]
[[package]]
name = "async-lock"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b"
dependencies = [
"event-listener 4.0.3",
"event-listener-strategy 0.4.0",
"pin-project-lite",
]
[[package]]
name = "async-process"
version = "2.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d"
dependencies = [
"async-channel",
"async-io",
"async-lock",
"async-signal",
"async-task",
"blocking",
"cfg-if",
"event-listener 5.3.0",
"futures-lite",
"rustix",
"tracing",
"windows-sys 0.52.0",
]
[[package]]
name = "async-recursion"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.60",
]
[[package]]
name = "async-signal"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda"
dependencies = [
"async-io",
"async-lock",
"atomic-waker",
"cfg-if",
"futures-core",
"futures-io",
"rustix",
"signal-hook-registry",
"slab",
"windows-sys 0.52.0",
]
[[package]] [[package]]
name = "async-stream" name = "async-stream"
version = "0.3.5" version = "0.3.5"
@ -177,6 +298,12 @@ dependencies = [
"syn 2.0.60", "syn 2.0.60",
] ]
[[package]]
name = "async-task"
version = "4.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.80" version = "0.1.80"
@ -211,6 +338,12 @@ dependencies = [
"system-deps", "system-deps",
] ]
[[package]]
name = "atomic-waker"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
[[package]] [[package]]
name = "atty" name = "atty"
version = "0.2.14" version = "0.2.14"
@ -434,6 +567,20 @@ dependencies = [
"generic-array", "generic-array",
] ]
[[package]]
name = "blocking"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88"
dependencies = [
"async-channel",
"async-lock",
"async-task",
"futures-io",
"futures-lite",
"piper",
]
[[package]] [[package]]
name = "brotli" name = "brotli"
version = "3.5.0" version = "3.5.0"
@ -564,6 +711,7 @@ dependencies = [
"serde_json", "serde_json",
"tauri", "tauri",
"tauri-build", "tauri-build",
"tauri-plugin-dialog",
"tauri-plugin-shell", "tauri-plugin-shell",
] ]
@ -873,6 +1021,15 @@ dependencies = [
"unicode-width", "unicode-width",
] ]
[[package]]
name = "concurrent-queue"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
dependencies = [
"crossbeam-utils",
]
[[package]] [[package]]
name = "confy" name = "confy"
version = "0.6.1" version = "0.6.1"
@ -1158,6 +1315,17 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "derivative"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]] [[package]]
name = "derive_more" name = "derive_more"
version = "0.99.17" version = "0.99.17"
@ -1387,6 +1555,33 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "endi"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
[[package]]
name = "enumflags2"
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d"
dependencies = [
"enumflags2_derive",
"serde",
]
[[package]]
name = "enumflags2_derive"
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.60",
]
[[package]] [[package]]
name = "env_filter" name = "env_filter"
version = "0.1.0" version = "0.1.0"
@ -1426,6 +1621,48 @@ dependencies = [
"windows-sys 0.52.0", "windows-sys 0.52.0",
] ]
[[package]]
name = "event-listener"
version = "4.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e"
dependencies = [
"concurrent-queue",
"parking",
"pin-project-lite",
]
[[package]]
name = "event-listener"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24"
dependencies = [
"concurrent-queue",
"parking",
"pin-project-lite",
]
[[package]]
name = "event-listener-strategy"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3"
dependencies = [
"event-listener 4.0.3",
"pin-project-lite",
]
[[package]]
name = "event-listener-strategy"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
dependencies = [
"event-listener 5.3.0",
"pin-project-lite",
]
[[package]] [[package]]
name = "fastrand" name = "fastrand"
version = "2.1.0" version = "2.1.0"
@ -1598,6 +1835,19 @@ version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
[[package]]
name = "futures-lite"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5"
dependencies = [
"fastrand",
"futures-core",
"futures-io",
"parking",
"pin-project-lite",
]
[[package]] [[package]]
name = "futures-macro" name = "futures-macro"
version = "0.3.30" version = "0.3.30"
@ -2856,6 +3106,18 @@ version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
[[package]]
name = "nix"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
dependencies = [
"bitflags 2.5.0",
"cfg-if",
"libc",
"memoffset",
]
[[package]] [[package]]
name = "nodrop" name = "nodrop"
version = "0.1.14" version = "0.1.14"
@ -2934,6 +3196,17 @@ dependencies = [
"objc_exception", "objc_exception",
] ]
[[package]]
name = "objc-foundation"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
dependencies = [
"block",
"objc",
"objc_id",
]
[[package]] [[package]]
name = "objc_exception" name = "objc_exception"
version = "0.1.2" version = "0.1.2"
@ -3091,6 +3364,16 @@ dependencies = [
"num-traits", "num-traits",
] ]
[[package]]
name = "ordered-stream"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
dependencies = [
"futures-core",
"pin-project-lite",
]
[[package]] [[package]]
name = "os_pipe" name = "os_pipe"
version = "1.1.5" version = "1.1.5"
@ -3150,6 +3433,12 @@ dependencies = [
"system-deps", "system-deps",
] ]
[[package]]
name = "parking"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
[[package]] [[package]]
name = "parking_lot" name = "parking_lot"
version = "0.12.2" version = "0.12.2"
@ -3370,6 +3659,17 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "piper"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf"
dependencies = [
"atomic-waker",
"fastrand",
"futures-io",
]
[[package]] [[package]]
name = "pkcs8" name = "pkcs8"
version = "0.10.2" version = "0.10.2"
@ -3413,6 +3713,21 @@ dependencies = [
"miniz_oxide", "miniz_oxide",
] ]
[[package]]
name = "polling"
version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3"
dependencies = [
"cfg-if",
"concurrent-queue",
"hermit-abi 0.3.9",
"pin-project-lite",
"rustix",
"tracing",
"windows-sys 0.52.0",
]
[[package]] [[package]]
name = "polyval" name = "polyval"
version = "0.6.2" version = "0.6.2"
@ -3823,6 +4138,30 @@ dependencies = [
"subtle", "subtle",
] ]
[[package]]
name = "rfd"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251"
dependencies = [
"ashpd",
"block",
"dispatch",
"glib-sys",
"gobject-sys",
"gtk-sys",
"js-sys",
"log",
"objc",
"objc-foundation",
"objc_id",
"raw-window-handle 0.6.1",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"windows-sys 0.48.0",
]
[[package]] [[package]]
name = "ring" name = "ring"
version = "0.17.8" version = "0.17.8"
@ -4495,6 +4834,12 @@ dependencies = [
"loom", "loom",
] ]
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]] [[package]]
name = "strfmt" name = "strfmt"
version = "0.2.4" version = "0.2.4"
@ -4856,6 +5201,43 @@ dependencies = [
"walkdir", "walkdir",
] ]
[[package]]
name = "tauri-plugin-dialog"
version = "2.0.0-beta.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4563f62939a475273e7b75eb4a862f0108969a54db813ef250092d470eff84dc"
dependencies = [
"dunce",
"log",
"raw-window-handle 0.6.1",
"rfd",
"serde",
"serde_json",
"tauri",
"tauri-plugin",
"tauri-plugin-fs",
"thiserror",
]
[[package]]
name = "tauri-plugin-fs"
version = "2.0.0-beta.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35377195c6923beda5f29482a16b492d431de964389fca9aaf81a0f7e908023f"
dependencies = [
"anyhow",
"glob",
"schemars",
"serde",
"serde_json",
"serde_repr",
"tauri",
"tauri-plugin",
"thiserror",
"url",
"uuid",
]
[[package]] [[package]]
name = "tauri-plugin-shell" name = "tauri-plugin-shell"
version = "2.0.0-beta.5" version = "2.0.0-beta.5"
@ -5110,6 +5492,7 @@ dependencies = [
"signal-hook-registry", "signal-hook-registry",
"socket2", "socket2",
"tokio-macros", "tokio-macros",
"tracing",
"windows-sys 0.48.0", "windows-sys 0.48.0",
] ]
@ -5484,6 +5867,17 @@ version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "uds_windows"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
dependencies = [
"memoffset",
"tempfile",
"winapi",
]
[[package]] [[package]]
name = "unic-char-property" name = "unic-char-property"
version = "0.9.0" version = "0.9.0"
@ -6327,8 +6721,115 @@ dependencies = [
"pkg-config", "pkg-config",
] ]
[[package]]
name = "xdg-home"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "zbus"
version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030"
dependencies = [
"async-broadcast",
"async-process",
"async-recursion",
"async-trait",
"derivative",
"enumflags2",
"event-listener 5.3.0",
"futures-core",
"futures-sink",
"futures-util",
"hex",
"nix",
"ordered-stream",
"rand 0.8.5",
"serde",
"serde_repr",
"sha1",
"static_assertions",
"tokio",
"tracing",
"uds_windows",
"windows-sys 0.52.0",
"xdg-home",
"zbus_macros",
"zbus_names",
"zvariant",
]
[[package]]
name = "zbus_macros"
version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7"
dependencies = [
"proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
"regex",
"syn 1.0.109",
"zvariant_utils",
]
[[package]]
name = "zbus_names"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
dependencies = [
"serde",
"static_assertions",
"zvariant",
]
[[package]] [[package]]
name = "zeroize" name = "zeroize"
version = "1.7.0" version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
[[package]]
name = "zvariant"
version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65"
dependencies = [
"endi",
"enumflags2",
"serde",
"static_assertions",
"url",
"zvariant_derive",
]
[[package]]
name = "zvariant_derive"
version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e"
dependencies = [
"proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
"syn 1.0.109",
"zvariant_utils",
]
[[package]]
name = "zvariant_utils"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]

View file

@ -18,11 +18,16 @@ use tower_http::trace::{DefaultMakeSpan, TraceLayer};
use tracing::{debug, error, info}; use tracing::{debug, error, info};
use uuid::Uuid; use uuid::Uuid;
pub async fn start_sender(relay: Arc<String>, files: Arc<Vec<String>>) { pub async fn start_sender(relay: Arc<String>, files: Arc<Vec<String>>, transfer_name: String) {
let (tx, mut rx) = mpsc::channel(1); let (tx, mut rx) = mpsc::channel(1);
debug!("Got relay: {relay}"); debug!("Got relay: {relay}");
let room_id = Uuid::new_v4().to_string(); let room_id = Uuid::new_v4().to_string();
let rand_name = generate_random_name(); let rand_name: String;
if transfer_name.is_empty() {
rand_name = generate_random_name();
} else {
rand_name = transfer_name.clone();
}
let local_room_id = room_id.clone(); let local_room_id = room_id.clone();
let local_files = files.clone(); let local_files = files.clone();
let local_relay = relay.clone(); let local_relay = relay.clone();
@ -56,6 +61,7 @@ pub async fn start_sender(relay: Arc<String>, files: Arc<Vec<String>>) {
.await .await
}); });
rx.recv().await.unwrap(); rx.recv().await.unwrap();
local_ws_thread.abort(); local_ws_thread.abort();
relay_thread.abort(); relay_thread.abort();

View file

@ -17,6 +17,7 @@
"@angular/platform-browser-dynamic": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0",
"@angular/router": "^17.0.0", "@angular/router": "^17.0.0",
"@tauri-apps/api": ">=2.0.0-beta.0", "@tauri-apps/api": ">=2.0.0-beta.0",
"@tauri-apps/plugin-dialog": "^2.0.0-beta.3",
"@tauri-apps/plugin-shell": ">=2.0.0-beta.0", "@tauri-apps/plugin-shell": ">=2.0.0-beta.0",
"rxjs": "~7.8.0", "rxjs": "~7.8.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
@ -3738,6 +3739,14 @@
"node": ">= 10" "node": ">= 10"
} }
}, },
"node_modules/@tauri-apps/plugin-dialog": {
"version": "2.0.0-beta.3",
"resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.3.tgz",
"integrity": "sha512-B3KxLjFxCVB3AIYWN/xY9HM6tO7m4u6aQk1t0ZrBToXThowRU9f62527EO0oj0uNlyKlXx20up68NkpdlER0yg==",
"dependencies": {
"@tauri-apps/api": "2.0.0-beta.11"
}
},
"node_modules/@tauri-apps/plugin-shell": { "node_modules/@tauri-apps/plugin-shell": {
"version": "2.0.0-beta.4", "version": "2.0.0-beta.4",
"resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.4.tgz", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.4.tgz",

View file

@ -18,25 +18,26 @@
"@angular/platform-browser": "^17.0.0", "@angular/platform-browser": "^17.0.0",
"@angular/platform-browser-dynamic": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0",
"@angular/router": "^17.0.0", "@angular/router": "^17.0.0",
"@tauri-apps/api": ">=2.0.0-beta.0",
"@tauri-apps/plugin-dialog": "^2.0.0-beta.3",
"@tauri-apps/plugin-shell": ">=2.0.0-beta.0",
"rxjs": "~7.8.0", "rxjs": "~7.8.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
"zone.js": "~0.14.2", "zone.js": "~0.14.2"
"@tauri-apps/api": ">=2.0.0-beta.0",
"@tauri-apps/plugin-shell": ">=2.0.0-beta.0"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "^17.0.0", "@angular-devkit/build-angular": "^17.0.0",
"@angular/cli": "^17.0.0", "@angular/cli": "^17.0.0",
"@angular/compiler-cli": "^17.0.0", "@angular/compiler-cli": "^17.0.0",
"@tauri-apps/cli": ">=2.0.0-beta.0",
"@types/jasmine": "~5.1.0", "@types/jasmine": "~5.1.0",
"internal-ip": "^7.0.0",
"jasmine-core": "~5.1.0", "jasmine-core": "~5.1.0",
"karma": "~6.4.0", "karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0", "karma-chrome-launcher": "~3.2.0",
"karma-coverage": "~2.2.0", "karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0", "karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0", "karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.2.2", "typescript": "~5.2.2"
"@tauri-apps/cli": ">=2.0.0-beta.0",
"internal-ip": "^7.0.0"
} }
} }

View file

@ -20,6 +20,7 @@ env_logger = "0.11.3"
caesar-core = { path = "../../caesar-core" } caesar-core = { path = "../../caesar-core" }
tauri = { version = "2.0.0-beta", features = [] } tauri = { version = "2.0.0-beta", features = [] }
tauri-plugin-shell = "2.0.0-beta" tauri-plugin-shell = "2.0.0-beta"
tauri-plugin-dialog = "2.0.0-beta"
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
serde_json = "1" serde_json = "1"

View file

@ -0,0 +1,17 @@
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"path:default",
"event:default",
"window:default",
"app:default",
"resources:default",
"menu:default",
"tray:default",
"window:allow-set-title",
"dialog:allow-open"
]
}

View file

@ -1,13 +1,15 @@
use caesar_core::{receiver, relay::server::start_ws, sender}; use caesar_core::{receiver, relay::server::start_ws, sender::{self, util::generate_random_name}};
use std::sync::Arc; use std::sync::Arc;
#[tauri::command] #[tauri::command]
async fn send(relay: Option<String>, files: Vec<String>) { async fn send(relay: Option<String>, files: Vec<String>) {
let relay_string = relay.unwrap_or_else(|| "default_relay_address".to_string()); let relay_string = relay.unwrap_or_else(|| "default_relay_address".to_string());
log::info!("Using relay: {}", relay_string); log::info!("Using relay: {}", relay_string);
let relay_arc = Arc::new(relay_string); let relay_arc = Arc::new(relay_string);
let files_arc = Arc::new(files); let files_arc = Arc::new(files);
sender::start_sender(relay_arc, files_arc).await; let transfer_name = generate_random_name();
sender::start_sender(relay_arc, files_arc, transfer_name.clone()).await;
} }
// #[tauri::command] // #[tauri::command]
@ -16,6 +18,7 @@ async fn send(relay: Option<String>, files: Vec<String>) {
// receiver::start_receiver(&relay_string, &name).await; // receiver::start_receiver(&relay_string, &name).await;
// } // }
#[tauri::command] #[tauri::command]
async fn serve(port: Option<i32>, listen_address: Option<String>) { async fn serve(port: Option<i32>, listen_address: Option<String>) {
let address = listen_address.unwrap_or_else(|| "localhost".to_string()); let address = listen_address.unwrap_or_else(|| "localhost".to_string());
@ -27,6 +30,7 @@ async fn serve(port: Option<i32>, listen_address: Option<String>) {
pub fn run() { pub fn run() {
env_logger::init(); env_logger::init();
tauri::Builder::default() tauri::Builder::default()
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_shell::init()) .plugin(tauri_plugin_shell::init())
.invoke_handler(tauri::generate_handler![send, serve]) .invoke_handler(tauri::generate_handler![send, serve])
.run(tauri::generate_context!()) .run(tauri::generate_context!())

View file

@ -0,0 +1,58 @@
h2 {
text-align: center;
color: #333;
}
p {
text-align: center;
font-size: 1.2em;
color: #666;
}
.form-group {
margin: 20px auto;
text-align: center;
}
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
input[type="text"] {
width: 50%;
padding: 10px;
margin: 10px 0;
box-sizing: border-box;
border: 2px solid #ccc;
border-radius: 4px;
}
button {
padding: 10px 20px;
margin: 10px;
font-size: 1em;
color: #fff;
background-color: #007BFF;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
ul {
list-style-type: none;
padding: 0;
text-align: center;
}
li {
margin: 5px 0;
color: #ffffff;
}

View file

@ -1,23 +1,26 @@
<!-- <div class="container">
<h1>Welcome to Tauri + Angular!</h1>
<div class="row">
<a href="https://tauri.app" target="_blank">
<img src="/assets/tauri.svg" class="logo tauri" alt="Tauri logo" />
</a>
<a href="https://angular.io" target="_blank">
<img src="/assets/angular.svg" class="logo angular" alt="Angular logo" />
</a>
</div>
<p>Click on the logos to learn more about the frameworks</p>
<form class="row" (submit)="greet($event, greetInput.value)">
<input #greetInput id="greet-input" placeholder="Enter a name..." />
<button type="submit">Greet</button>
</form>
<p>{{ greetingMessage }}</p>
</div>
<button (click)="sendData()">Send Data</button> -->
<h2>Sender</h2> <h2>Sender</h2>
<p>Hier können Sie Dateien senden.</p> <p>Hier können Sie Dateien senden.</p>
<button (click)="redirectToHome()">Startseite</button>
<div class="form-group">
<label for="relayAddress">Relay Server Adresse:</label>
<input type="text" id="relayAddress" [(ngModel)]="relayAddress" placeholder="::1">
</div>
<div class="form-group">
<label for="relayPort">Port:</label>
<input type="text" id="relayPort" [(ngModel)]="relayPort" placeholder="8000">
</div>
<div class="form-group">
<button (click)="selectFile()">Datei anfügen</button>
</div>
<ul class="file-list">
<li *ngFor="let fileName of fileNames">{{ fileName }}</li>
</ul>
<div class="form-group">
<button (click)="sendData()">Daten senden</button>
</div>
<div class="form-group">
<button (click)="redirectToHome()">Startseite</button>
</div>

View file

@ -1,36 +1,50 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { TauriService } from '../../services/tauri.service'; import { TauriService } from '../../services/tauri.service';
import { invoke } from "@tauri-apps/api/core";
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { FileResponse, open } from '@tauri-apps/plugin-dialog';
@Component({ @Component({
selector: 'app-sender', selector: 'app-sender',
standalone: true, standalone: true,
imports: [], imports: [FormsModule, CommonModule],
templateUrl: './sender.component.html', templateUrl: './sender.component.html',
styleUrl: './sender.component.css' styleUrls: ['./sender.component.css']
}) })
export class SenderComponent { export class SenderComponent {
files: string[] = [];
fileNames: string[] = [];
relayAddress: string = '';
relayPort?: number;
constructor(private tauriService: TauriService, private router: Router) {} constructor(private tauriService: TauriService, private router: Router) {}
greetingMessage = "";
greet(event: SubmitEvent, name: string): void {
event.preventDefault();
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
invoke<string>("greet", { name }).then((text) => {
this.greetingMessage = text;
});
}
redirectToHome() { redirectToHome() {
this.router.navigate(['']) this.router.navigate([''])
} }
async selectFile() {
// Open the file dialog and get the file path(s)
const selected:any = await open({
multiple: false
});
this.fileNames.push(selected.name);
this.files.push(selected.path);
}
getRelayURL(): string {
return `ws://${this.relayAddress}:${this.relayPort}`;
}
sendData() { sendData() {
const relay = 'ws://[::1]:8000'; const relay = this.getRelayURL();
const files = ['C:\\Projekte\\Rust\\caesar-transfer\\caesar-tauri-angular\\src\\assets\\file1.txt']; if (this.files.length > 0) {
this.tauriService.send(relay, files) this.tauriService.send(relay, this.files)
.then((sendDataReturn) => console.log(sendDataReturn + 'Data sent successfully')) .then(sendDataReturn => console.log(sendDataReturn + ' Data sent successfully'))
.catch(error => console.error('Error sending data:', error)); .catch(error => console.error('Error sending data:', error));
} else {
console.error('No files to send.');
}
} }
} }

View file

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { invoke } from "@tauri-apps/api/core"; import { invoke } from '@tauri-apps/api/core';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -9,12 +9,12 @@ export class TauriService {
constructor() { } constructor() { }
async send(relay: string, files: string[]): Promise<any> { async send(relay: string, files: string[]): Promise<any> {
console.log(relay, files) console.log(relay, files);
await invoke('send', { relay, files }); await invoke('send', { relay, files });
} }
serve(port: number, listen_addr: string): Promise<any> { serve(port: number, listen_addr: string): Promise<any> {
console.log("Listening on address:" + listen_addr + ":" + port) console.log("Listening on address:" + listen_addr + ":" + port);
return invoke('serve', { port: port, listen_addr: listen_addr }) return invoke('serve', { port: port, listen_addr: listen_addr });
} }
} }