From 96340622d896dd84e09359afa31487f6b7d59d72 Mon Sep 17 00:00:00 2001 From: ikeen0807 Date: Wed, 15 May 2024 21:01:33 +0200 Subject: [PATCH] Almost completed sender --- Cargo.lock | 501 ++++++++++++++++++ caesar-core/src/sender/mod.rs | 10 +- caesar-tauri-angular/package-lock.json | 9 + caesar-tauri-angular/package.json | 13 +- caesar-tauri-angular/src-tauri/Cargo.toml | 1 + .../src-tauri/capabilities/main.json | 17 + caesar-tauri-angular/src-tauri/src/lib.rs | 8 +- .../components/sender/sender.component.css | 58 ++ .../components/sender/sender.component.html | 45 +- .../app/components/sender/sender.component.ts | 48 +- .../src/app/services/tauri.service.ts | 8 +- 11 files changed, 666 insertions(+), 52 deletions(-) create mode 100644 caesar-tauri-angular/src-tauri/capabilities/main.json diff --git a/Cargo.lock b/Cargo.lock index f233464..90b92db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,6 +155,127 @@ version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" 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]] name = "async-stream" version = "0.3.5" @@ -177,6 +298,12 @@ dependencies = [ "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]] name = "async-trait" version = "0.1.80" @@ -211,6 +338,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atty" version = "0.2.14" @@ -434,6 +567,20 @@ dependencies = [ "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]] name = "brotli" version = "3.5.0" @@ -564,6 +711,7 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-dialog", "tauri-plugin-shell", ] @@ -873,6 +1021,15 @@ dependencies = [ "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]] name = "confy" version = "0.6.1" @@ -1158,6 +1315,17 @@ dependencies = [ "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]] name = "derive_more" version = "0.99.17" @@ -1387,6 +1555,33 @@ dependencies = [ "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]] name = "env_filter" version = "0.1.0" @@ -1426,6 +1621,48 @@ dependencies = [ "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]] name = "fastrand" version = "2.1.0" @@ -1598,6 +1835,19 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" 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]] name = "futures-macro" version = "0.3.30" @@ -2856,6 +3106,18 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" 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]] name = "nodrop" version = "0.1.14" @@ -2934,6 +3196,17 @@ dependencies = [ "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]] name = "objc_exception" version = "0.1.2" @@ -3091,6 +3364,16 @@ dependencies = [ "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]] name = "os_pipe" version = "1.1.5" @@ -3150,6 +3433,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "parking_lot" version = "0.12.2" @@ -3370,6 +3659,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" 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]] name = "pkcs8" version = "0.10.2" @@ -3413,6 +3713,21 @@ dependencies = [ "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]] name = "polyval" version = "0.6.2" @@ -3823,6 +4138,30 @@ dependencies = [ "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]] name = "ring" version = "0.17.8" @@ -4495,6 +4834,12 @@ dependencies = [ "loom", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strfmt" version = "0.2.4" @@ -4856,6 +5201,43 @@ dependencies = [ "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]] name = "tauri-plugin-shell" version = "2.0.0-beta.5" @@ -5110,6 +5492,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "windows-sys 0.48.0", ] @@ -5484,6 +5867,17 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" 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]] name = "unic-char-property" version = "0.9.0" @@ -6327,8 +6721,115 @@ dependencies = [ "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]] name = "zeroize" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" 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", +] diff --git a/caesar-core/src/sender/mod.rs b/caesar-core/src/sender/mod.rs index f57b5a6..a6b669e 100644 --- a/caesar-core/src/sender/mod.rs +++ b/caesar-core/src/sender/mod.rs @@ -18,11 +18,16 @@ use tower_http::trace::{DefaultMakeSpan, TraceLayer}; use tracing::{debug, error, info}; use uuid::Uuid; -pub async fn start_sender(relay: Arc, files: Arc>) { +pub async fn start_sender(relay: Arc, files: Arc>, transfer_name: String) { let (tx, mut rx) = mpsc::channel(1); debug!("Got relay: {relay}"); 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_files = files.clone(); let local_relay = relay.clone(); @@ -56,6 +61,7 @@ pub async fn start_sender(relay: Arc, files: Arc>) { .await }); + rx.recv().await.unwrap(); local_ws_thread.abort(); relay_thread.abort(); diff --git a/caesar-tauri-angular/package-lock.json b/caesar-tauri-angular/package-lock.json index 6352f4f..a3df40b 100644 --- a/caesar-tauri-angular/package-lock.json +++ b/caesar-tauri-angular/package-lock.json @@ -17,6 +17,7 @@ "@angular/platform-browser-dynamic": "^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", "tslib": "^2.3.0", @@ -3738,6 +3739,14 @@ "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": { "version": "2.0.0-beta.4", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.4.tgz", diff --git a/caesar-tauri-angular/package.json b/caesar-tauri-angular/package.json index 446c932..048c152 100644 --- a/caesar-tauri-angular/package.json +++ b/caesar-tauri-angular/package.json @@ -18,25 +18,26 @@ "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^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", "tslib": "^2.3.0", - "zone.js": "~0.14.2", - "@tauri-apps/api": ">=2.0.0-beta.0", - "@tauri-apps/plugin-shell": ">=2.0.0-beta.0" + "zone.js": "~0.14.2" }, "devDependencies": { "@angular-devkit/build-angular": "^17.0.0", "@angular/cli": "^17.0.0", "@angular/compiler-cli": "^17.0.0", + "@tauri-apps/cli": ">=2.0.0-beta.0", "@types/jasmine": "~5.1.0", + "internal-ip": "^7.0.0", "jasmine-core": "~5.1.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.2.2", - "@tauri-apps/cli": ">=2.0.0-beta.0", - "internal-ip": "^7.0.0" + "typescript": "~5.2.2" } } diff --git a/caesar-tauri-angular/src-tauri/Cargo.toml b/caesar-tauri-angular/src-tauri/Cargo.toml index 452c688..69e8450 100644 --- a/caesar-tauri-angular/src-tauri/Cargo.toml +++ b/caesar-tauri-angular/src-tauri/Cargo.toml @@ -20,6 +20,7 @@ env_logger = "0.11.3" caesar-core = { path = "../../caesar-core" } tauri = { version = "2.0.0-beta", features = [] } tauri-plugin-shell = "2.0.0-beta" +tauri-plugin-dialog = "2.0.0-beta" serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/caesar-tauri-angular/src-tauri/capabilities/main.json b/caesar-tauri-angular/src-tauri/capabilities/main.json new file mode 100644 index 0000000..b91315a --- /dev/null +++ b/caesar-tauri-angular/src-tauri/capabilities/main.json @@ -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" + ] + } \ No newline at end of file diff --git a/caesar-tauri-angular/src-tauri/src/lib.rs b/caesar-tauri-angular/src-tauri/src/lib.rs index 71eeaef..be2483a 100644 --- a/caesar-tauri-angular/src-tauri/src/lib.rs +++ b/caesar-tauri-angular/src-tauri/src/lib.rs @@ -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; + #[tauri::command] async fn send(relay: Option, files: Vec) { let relay_string = relay.unwrap_or_else(|| "default_relay_address".to_string()); log::info!("Using relay: {}", relay_string); let relay_arc = Arc::new(relay_string); 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] @@ -16,6 +18,7 @@ async fn send(relay: Option, files: Vec) { // receiver::start_receiver(&relay_string, &name).await; // } + #[tauri::command] async fn serve(port: Option, listen_address: Option) { let address = listen_address.unwrap_or_else(|| "localhost".to_string()); @@ -27,6 +30,7 @@ async fn serve(port: Option, listen_address: Option) { pub fn run() { env_logger::init(); tauri::Builder::default() + .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_shell::init()) .invoke_handler(tauri::generate_handler![send, serve]) .run(tauri::generate_context!()) diff --git a/caesar-tauri-angular/src/app/components/sender/sender.component.css b/caesar-tauri-angular/src/app/components/sender/sender.component.css index e69de29..a4d41f3 100644 --- a/caesar-tauri-angular/src/app/components/sender/sender.component.css +++ b/caesar-tauri-angular/src/app/components/sender/sender.component.css @@ -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; + } + \ No newline at end of file diff --git a/caesar-tauri-angular/src/app/components/sender/sender.component.html b/caesar-tauri-angular/src/app/components/sender/sender.component.html index f17a864..aad0d9f 100644 --- a/caesar-tauri-angular/src/app/components/sender/sender.component.html +++ b/caesar-tauri-angular/src/app/components/sender/sender.component.html @@ -1,23 +1,26 @@ - -

Sender

Hier können Sie Dateien senden.

- \ No newline at end of file + +
+ + +
+
+ + +
+ +
+ +
+ +
    +
  • {{ fileName }}
  • +
+ +
+ +
+
+ +
diff --git a/caesar-tauri-angular/src/app/components/sender/sender.component.ts b/caesar-tauri-angular/src/app/components/sender/sender.component.ts index 138814e..05535d5 100644 --- a/caesar-tauri-angular/src/app/components/sender/sender.component.ts +++ b/caesar-tauri-angular/src/app/components/sender/sender.component.ts @@ -1,36 +1,50 @@ import { Component } from '@angular/core'; import { TauriService } from '../../services/tauri.service'; -import { invoke } from "@tauri-apps/api/core"; import { Router } from '@angular/router'; +import { FormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; +import { FileResponse, open } from '@tauri-apps/plugin-dialog'; @Component({ selector: 'app-sender', standalone: true, - imports: [], + imports: [FormsModule, CommonModule], templateUrl: './sender.component.html', - styleUrl: './sender.component.css' + styleUrls: ['./sender.component.css'] }) export class SenderComponent { + files: string[] = []; + fileNames: string[] = []; + relayAddress: string = ''; + relayPort?: number; 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("greet", { name }).then((text) => { - this.greetingMessage = text; - }); - } redirectToHome() { 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() { - const relay = 'ws://[::1]:8000'; - const files = ['C:\\Projekte\\Rust\\caesar-transfer\\caesar-tauri-angular\\src\\assets\\file1.txt']; - this.tauriService.send(relay, files) - .then((sendDataReturn) => console.log(sendDataReturn + 'Data sent successfully')) - .catch(error => console.error('Error sending data:', error)); + const relay = this.getRelayURL(); + if (this.files.length > 0) { + this.tauriService.send(relay, this.files) + .then(sendDataReturn => console.log(sendDataReturn + ' Data sent successfully')) + .catch(error => console.error('Error sending data:', error)); + } else { + console.error('No files to send.'); + } } } \ No newline at end of file diff --git a/caesar-tauri-angular/src/app/services/tauri.service.ts b/caesar-tauri-angular/src/app/services/tauri.service.ts index ba00161..71dbcd4 100644 --- a/caesar-tauri-angular/src/app/services/tauri.service.ts +++ b/caesar-tauri-angular/src/app/services/tauri.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { invoke } from "@tauri-apps/api/core"; +import { invoke } from '@tauri-apps/api/core'; @Injectable({ providedIn: 'root' @@ -9,12 +9,12 @@ export class TauriService { constructor() { } async send(relay: string, files: string[]): Promise { - console.log(relay, files) + console.log(relay, files); await invoke('send', { relay, files }); } serve(port: number, listen_addr: string): Promise { - console.log("Listening on address:" + listen_addr + ":" + port) - return invoke('serve', { port: port, listen_addr: listen_addr }) + console.log("Listening on address:" + listen_addr + ":" + port); + return invoke('serve', { port: port, listen_addr: listen_addr }); } } \ No newline at end of file