From b26b0d3916951e3fe9969b2aa1387c65e61e2011 Mon Sep 17 00:00:00 2001 From: cediackermann Date: Mon, 6 Jan 2025 15:20:14 +0100 Subject: [PATCH] Add file and ip input --- Cargo.lock | 460 +++++++++++++++++++++++++--------------------- Cargo.toml | 6 +- audios/ferris.png | Bin 0 -> 46286 bytes src/main.rs | 2 +- src/ui_app.rs | 34 +++- 5 files changed, 282 insertions(+), 220 deletions(-) create mode 100644 audios/ferris.png diff --git a/Cargo.lock b/Cargo.lock index 34eaefb..8b89a2f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,15 +20,15 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "accesskit" -version = "0.16.3" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b76d84ee70e30a4a7e39ab9018e2b17a6a09e31084176cc7c0b2dec036ba45" +checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" [[package]] name = "accesskit_atspi_common" -version = "0.9.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5393c75d4666f580f4cac0a968bc97c36076bb536a129f28210dac54ee127ed" +checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" dependencies = [ "accesskit", "accesskit_consumer", @@ -40,33 +40,34 @@ dependencies = [ [[package]] name = "accesskit_consumer" -version = "0.24.3" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a12dc159d52233c43d9fe5415969433cbdd52c3d6e0df51bda7d447427b9986" +checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" dependencies = [ "accesskit", + "hashbrown", "immutable-chunkmap", ] [[package]] name = "accesskit_macos" -version = "0.17.4" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc6c1ecd82053d127961ad80a8beaa6004fb851a3a5b96506d7a6bd462403f6" +checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" dependencies = [ "accesskit", "accesskit_consumer", + "hashbrown", "objc2", "objc2-app-kit", "objc2-foundation", - "once_cell", ] [[package]] name = "accesskit_unix" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be7f5cf6165be10a54b2655fa2e0e12b2509f38ed6fc43e11c31fdb7ee6230bb" +checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" dependencies = [ "accesskit", "accesskit_atspi_common", @@ -82,12 +83,13 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.23.2" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "974e96c347384d9133427167fb8a58c340cb0496988dacceebdc1ed27071023b" +checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" dependencies = [ "accesskit", "accesskit_consumer", + "hashbrown", "paste", "static_assertions", "windows 0.58.0", @@ -96,9 +98,9 @@ dependencies = [ [[package]] name = "accesskit_winit" -version = "0.22.4" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aea3522719f1c44564d03e9469a8e2f3a98b3a8a880bd66d0789c6b9c4a669dd" +checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" dependencies = [ "accesskit", "accesskit_macos", @@ -114,6 +116,17 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.11" @@ -341,7 +354,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -376,7 +389,7 @@ checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -385,6 +398,12 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atomic_refcell" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" + [[package]] name = "atspi" version = "0.22.0" @@ -478,23 +497,23 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.90", + "syn", ] [[package]] name = "bit-set" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" @@ -568,7 +587,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -710,37 +729,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" -[[package]] -name = "com" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" -dependencies = [ - "com_macros", -] - -[[package]] -name = "com_macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" -dependencies = [ - "com_macros_support", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "com_macros_support" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "combine" version = "4.6.7" @@ -915,6 +903,27 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -929,7 +938,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -963,29 +972,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] -name = "ecolor" -version = "0.29.1" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775cfde491852059e386c4e1deb4aef381c617dc364184c6f6afee99b87c402b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "ecolor" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d72e9c39f6e11a2e922d04a34ec5e7ef522ea3f5a1acfca7a19d16ad5fe50f5" dependencies = [ "bytemuck", - "emath", + "emath 0.30.0", ] [[package]] name = "eframe" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ac2645a9bf4826eb4e91488b1f17b8eaddeef09396706b2f14066461338e24f" +checksum = "b2f2d9e7ea2d11ec9e98a8683b6eb99f9d7d0448394ef6e0d6d91bd4eb817220" dependencies = [ - "ahash", + "ahash 0.8.11", "bytemuck", "document-features", - "egui", + "egui 0.30.0", "egui-wgpu", "egui-winit", "egui_glow", - "glow 0.14.2", + "glow 0.16.0", "glutin", "glutin-winit", "image", @@ -996,6 +1011,7 @@ dependencies = [ "objc2-foundation", "parking_lot", "percent-encoding", + "profiling", "raw-window-handle", "static_assertions", "wasm-bindgen", @@ -1003,36 +1019,60 @@ dependencies = [ "web-sys", "web-time", "winapi", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "winit", ] [[package]] name = "egui" -version = "0.29.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53eafabcce0cb2325a59a98736efe0bf060585b437763f8c476957fb274bb974" +checksum = "b403f29d592b5c2267279bfdf2cd3fe3ba0e7a8738d03203a6f1536e8e9d26bd" +dependencies = [ + "epaint 0.14.0", +] + +[[package]] +name = "egui" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "252d52224d35be1535d7fd1d6139ce071fb42c9097773e79f7665604f5596b5e" dependencies = [ "accesskit", - "ahash", - "emath", - "epaint", + "ahash 0.8.11", + "emath 0.30.0", + "epaint 0.30.0", "log", "nohash-hasher", + "profiling", +] + +[[package]] +name = "egui-file-dialog" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac4167fcddb279f41863074b96b877c6e48c02d543b7d6111d1f3957b9a5874f" +dependencies = [ + "directories", + "dunce", + "egui 0.30.0", + "serde", + "sysinfo", ] [[package]] name = "egui-wgpu" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00fd5d06d8405397e64a928fa0ef3934b3c30273ea7603e3dc4627b1f7a1a82" +checksum = "26c1e821d2d8921ef6ce98b258c7e24d9d6aab2ca1f9cdf374eca997e7f67f59" dependencies = [ - "ahash", + "ahash 0.8.11", "bytemuck", "document-features", - "egui", - "epaint", + "egui 0.30.0", + "epaint 0.30.0", "log", + "profiling", "thiserror", "type-map", "web-time", @@ -1042,15 +1082,16 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9c430f4f816340e8e8c1b20eec274186b1be6bc4c7dfc467ed50d57abc36c6" +checksum = "1e84c2919cd9f3a38a91e8f84ac6a245c19251fd95226ed9fae61d5ea564fce3" dependencies = [ "accesskit_winit", - "ahash", + "ahash 0.8.11", "arboard", - "egui", + "egui 0.30.0", "log", + "profiling", "raw-window-handle", "smithay-clipboard", "web-time", @@ -1060,32 +1101,34 @@ dependencies = [ [[package]] name = "egui_extras" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3c1f5cd8dfe2ade470a218696c66cf556fcfd701e7830fa2e9f4428292a2a1" +checksum = "3d7a8198c088b1007108cb2d403bc99a5e370999b200db4f14559610d7330126" dependencies = [ - "ahash", - "egui", + "ahash 0.8.11", + "egui 0.30.0", "ehttp", "enum-map", "image", "log", "mime_guess2", + "profiling", "resvg", ] [[package]] name = "egui_glow" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e39bccc683cd43adab530d8f21a13eb91e80de10bcc38c3f1c16601b6f62b26" +checksum = "3eaf6264cc7608e3e69a7d57a6175f438275f1b3889c1a551b418277721c95e6" dependencies = [ - "ahash", + "ahash 0.8.11", "bytemuck", - "egui", - "glow 0.14.2", + "egui 0.30.0", + "glow 0.16.0", "log", "memoffset", + "profiling", "wasm-bindgen", "web-sys", "winit", @@ -1113,9 +1156,15 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "emath" -version = "0.29.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fe0049ce51d0fb414d029e668dd72eb30bc2b739bf34296ed97bd33df544f3" +checksum = "cca5179aa9d15128cebb79bb56dda73a79cc66b402056ff19a992e54b365e15c" + +[[package]] +name = "emath" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4fe73c1207b864ee40aa0b0c038d6092af1030744678c60188a05c28553515d" dependencies = [ "bytemuck", ] @@ -1153,7 +1202,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -1174,31 +1223,45 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] name = "epaint" -version = "0.29.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a32af8da821bd4f43f2c137e295459ee2e1661d87ca8779dfa0eaf45d870e20f" +checksum = "136e7d88da926182bcfdb8217137dd347dfe5dc03b8988eaba3ef8becf83394a" dependencies = [ "ab_glyph", - "ahash", + "ahash 0.7.8", + "atomic_refcell", + "emath 0.14.0", + "ordered-float", +] + +[[package]] +name = "epaint" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5666f8d25236293c966fbb3635eac18b04ad1914e3bab55bc7d44b9980cafcac" +dependencies = [ + "ab_glyph", + "ahash 0.8.11", "bytemuck", "ecolor", - "emath", + "emath 0.30.0", "epaint_default_fonts", "log", "nohash-hasher", "parking_lot", + "profiling", ] [[package]] name = "epaint_default_fonts" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483440db0b7993cf77a20314f08311dbe95675092405518c0677aa08c151a3ea" +checksum = "66f6ddac3e6ac6fd4c3d48bb8b1943472f8da0f43a4303bcd8a18aa594401c80" [[package]] name = "equivalent" @@ -1298,7 +1361,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -1349,7 +1412,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -1441,9 +1504,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "glow" -version = "0.13.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" dependencies = [ "js-sys", "slotmap", @@ -1453,9 +1516,9 @@ dependencies = [ [[package]] name = "glow" -version = "0.14.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" dependencies = [ "js-sys", "slotmap", @@ -1548,19 +1611,6 @@ dependencies = [ "bitflags 2.6.0", ] -[[package]] -name = "gpu-allocator" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7" -dependencies = [ - "log", - "presser", - "thiserror", - "winapi", - "windows 0.52.0", -] - [[package]] name = "gpu-descriptor" version = "0.3.1" @@ -1590,21 +1640,6 @@ dependencies = [ "foldhash", ] -[[package]] -name = "hassle-rs" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" -dependencies = [ - "bitflags 2.6.0", - "com", - "libc", - "libloading", - "thiserror", - "widestring", - "winapi", -] - [[package]] name = "hermit-abi" version = "0.4.0" @@ -1753,7 +1788,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -2061,9 +2096,9 @@ dependencies = [ [[package]] name = "naga" -version = "22.1.0" +version = "23.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" +checksum = "364f94bc34f61332abebe8cad6f6cd82a5b65cff22c828d05d0968911462ca4f" dependencies = [ "arrayvec", "bit-set", @@ -2170,7 +2205,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -2200,7 +2235,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -2453,6 +2488,12 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "orbclient" version = "0.3.48" @@ -2462,6 +2503,15 @@ dependencies = [ "libredox", ] +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -2545,7 +2595,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -2614,12 +2664,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - [[package]] name = "proc-macro-crate" version = "3.2.0" @@ -2732,6 +2776,17 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + [[package]] name = "regex" version = "1.11.1" @@ -2926,7 +2981,7 @@ checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -2937,7 +2992,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -3157,17 +3212,6 @@ dependencies = [ "symphonia-core", ] -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.90" @@ -3185,6 +3229,8 @@ version = "0.1.0" dependencies = [ "bincode", "eframe", + "egui 0.14.2", + "egui-file-dialog", "egui_extras", "rodio", "serde", @@ -3198,7 +3244,18 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", +] + +[[package]] +name = "sysinfo" +version = "0.33.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +dependencies = [ + "core-foundation-sys", + "libc", + "windows 0.54.0", ] [[package]] @@ -3241,7 +3298,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -3331,7 +3388,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -3537,7 +3594,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.90", + "syn", "wasm-bindgen-shared", ] @@ -3572,7 +3629,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3747,9 +3804,9 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wgpu" -version = "22.1.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433" +checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a" dependencies = [ "arrayvec", "cfg_aliases 0.1.1", @@ -3771,9 +3828,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "22.1.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" +checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a" dependencies = [ "arrayvec", "bit-vec", @@ -3796,22 +3853,21 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "22.0.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f" +checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821" dependencies = [ "android_system_properties", "arrayvec", "ash", "bitflags 2.6.0", + "bytemuck", "cfg_aliases 0.1.1", "core-graphics-types", - "glow 0.13.1", + "glow 0.14.2", "glutin_wgl_sys", "gpu-alloc", - "gpu-allocator", "gpu-descriptor", - "hassle-rs", "js-sys", "khronos-egl", "libc", @@ -3832,26 +3888,20 @@ dependencies = [ "wasm-bindgen", "web-sys", "wgpu-types", - "winapi", + "windows 0.58.0", ] [[package]] name = "wgpu-types" -version = "22.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" +checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068" dependencies = [ "bitflags 2.6.0", "js-sys", "web-sys", ] -[[package]] -name = "widestring" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" - [[package]] name = "winapi" version = "0.3.9" @@ -3883,16 +3933,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core 0.52.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.54.0" @@ -3913,15 +3953,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.54.0" @@ -3953,7 +3984,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -3964,7 +3995,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -4004,6 +4035,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -4206,7 +4246,7 @@ version = "0.30.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5d74280aabb958072864bff6cfbcf9025cf8bfacdde5e32b5e12920ef703b0f" dependencies = [ - "ahash", + "ahash 0.8.11", "android-activity", "atomic-waker", "bitflags 2.6.0", @@ -4372,7 +4412,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", "synstructure", ] @@ -4432,7 +4472,7 @@ checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", "zbus-lockstep", "zbus_xml", "zvariant", @@ -4447,7 +4487,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn", "zvariant_utils", ] @@ -4493,7 +4533,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -4513,7 +4553,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", "synstructure", ] @@ -4542,7 +4582,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] [[package]] @@ -4567,7 +4607,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn", "zvariant_utils", ] @@ -4579,5 +4619,5 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index 9e9f44b..1b195fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,7 @@ edition = "2021" bincode = "1.3.3" rodio = "0.20.1" serde = { version = "1.0.216", features = ["derive"] } -eframe = "0.29.1" -egui_extras = { version = "0.29.1", features = ["all_loaders"] } +eframe = "0.30.0" +egui_extras = { version = "0.30.0", features = ["all_loaders"] } +egui = { version = "0.14", features = ["default"] } +egui-file-dialog = "0.8.0" diff --git a/audios/ferris.png b/audios/ferris.png new file mode 100644 index 0000000000000000000000000000000000000000..8741baa19d02a003db73c33bd779a324bc1a57fa GIT binary patch literal 46286 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 RENp6y4PQkzK4g3_k}7JS`?oK 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 eframe::Result { let options = eframe::NativeOptions { - viewport: egui::ViewportBuilder::default().with_inner_size([320.0, 240.0]), + viewport: egui::ViewportBuilder::default().with_inner_size([1000.0, 1000.0]), ..Default::default() }; diff --git a/src/ui_app.rs b/src/ui_app.rs index 58b4611..7bb5ec8 100644 --- a/src/ui_app.rs +++ b/src/ui_app.rs @@ -1,22 +1,42 @@ use eframe::egui; +use std::path::PathBuf; +use egui_file_dialog::FileDialog; -use crate::dispatcher::Dispatcher; +use crate::dispatcher; -pub struct UIApp {} +pub struct UIApp { + file_dialog: FileDialog, + picked_file: Option, + ip_address: String, +} impl Default for UIApp { fn default() -> Self { - Self {} + Self { + file_dialog: FileDialog::new(), + picked_file: None, + ip_address: "127.0.0.1".to_string(), + } } } impl eframe::App for UIApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { - ui.heading("My egui Application"); - ui.label("Hello"); - if ui.button("Dispatch sample").clicked() { - Dispatcher::handle_dispatch_sample(); + ui.horizontal(|ui|{ + ui.label("Enter IP of target device: "); + ui.text_edit_singleline(&mut self.ip_address); + }); + if ui.button("Pick file").clicked() { + self.file_dialog.pick_file(); + } + ui.label(format!("Picked file: {:?}", self.picked_file)); + self.file_dialog.update(ctx); + if let Some(path) = self.file_dialog.take_picked() { + self.picked_file = Some(path.to_path_buf()); + } + if ui.button("Play sound").clicked() { + dispatcher::Dispatcher::handle_dispatch_sample(); } }); }