From 3c7df5fc6e0d836fde1c3c8dd563f3d970b2a3d2 Mon Sep 17 00:00:00 2001 From: Priler Date: Thu, 11 Dec 2025 23:43:50 +0500 Subject: [PATCH] Latest changes --- app/.gitignore | 4 +- app/Cargo.lock | 1908 ++++++++++++++++++++++++-------- app/Cargo.toml | 34 +- app/post_build.py | 2 + app/src/app.rs | 36 +- app/src/audio.rs | 32 +- app/src/audio/kira.rs | 19 +- app/src/audio/rodio.rs | 18 +- app/src/commands.rs | 92 +- app/src/commands/structs.rs | 3 +- app/src/config.rs | 58 +- app/src/config/structs.rs | 23 +- app/src/db.rs | 19 +- app/src/db/structs.rs | 14 +- app/src/listener.rs | 30 +- app/src/listener/porcupine.rs | 40 +- app/src/listener/rustpotter.rs | 27 +- app/src/listener/vosk.rs | 9 +- app/src/log.rs | 8 +- app/src/main.rs | 21 +- app/src/recorder.rs | 71 +- app/src/recorder/pvrecorder.rs | 61 +- app/src/stt.rs | 12 +- app/src/stt/vosk.rs | 28 +- app/src/tray.rs | 51 +- app/src/tray/menu.rs | 6 +- 26 files changed, 1917 insertions(+), 709 deletions(-) diff --git a/app/.gitignore b/app/.gitignore index 62a7761..a5824d4 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1,3 +1,5 @@ # Generated by Cargo # will have compiled files and executables -/target/ \ No newline at end of file +/target/ +*.db +log.txt \ No newline at end of file diff --git a/app/Cargo.lock b/app/Cargo.lock index aa87800..17cb34b 100644 --- a/app/Cargo.lock +++ b/app/Cargo.lock @@ -24,6 +24,34 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy 0.7.32", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + [[package]] name = "alsa" version = "0.7.0" @@ -33,7 +61,7 @@ dependencies = [ "alsa-sys", "bitflags 1.3.2", "libc", - "nix 0.24.3", + "nix", ] [[package]] @@ -48,20 +76,23 @@ dependencies = [ [[package]] name = "android-activity" -version = "0.4.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c77a0045eda8b888c76ea473c2b0515ba6f471d318f8927c5c72240937035a6" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", - "bitflags 1.3.2", + "bitflags 2.5.0", "cc", + "cesu8", + "jni 0.21.1", "jni-sys", "libc", "log", - "ndk", + "ndk 0.8.0", "ndk-context", - "ndk-sys", - "num_enum", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum 0.7.2", + "thiserror", ] [[package]] @@ -87,9 +118,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" [[package]] name = "arc-swap" @@ -97,6 +134,17 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dabe5a181f83789739c194cbe5a897dde195078fac08568d09221fd6137a7ba8" +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + [[package]] name = "arrayref" version = "0.3.7" @@ -110,22 +158,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] -name = "atk" -version = "0.16.0" +name = "as-raw-xcb-connection" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "atk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" dependencies = [ "atk-sys", - "bitflags 1.3.2", "glib", "libc", ] [[package]] name = "atk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" dependencies = [ "glib-sys", "gobject-sys", @@ -140,14 +193,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5450eca8ce5abcfd5520727e975ebab30ccca96030550406b0ca718b224ead10" [[package]] -name = "atomic_enum" -version = "0.2.0" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6227a8d6fdb862bcb100c4314d0d9579e5cd73fa6df31a2e6f6e1acd3c5f1207" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atomic_enum" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e1aca718ea7b89985790c94aad72d77533063fe00bc497bb79a7c2dae6a661" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] @@ -156,6 +215,29 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + [[package]] name = "bindgen" version = "0.64.0" @@ -194,6 +276,21 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] + +[[package]] +name = "bitstream-io" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c9989a51171e2e81038ab168b6ae22886fe9ded214430dbb4f41c28cf176da" + [[package]] name = "block" version = "0.1.6" @@ -202,23 +299,29 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-sys" -version = "0.1.0-beta.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" dependencies = [ "objc-sys", ] [[package]] name = "block2" -version = "0.2.0-alpha.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" dependencies = [ "block-sys", - "objc2-encode", + "objc2", ] +[[package]] +name = "built" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d17f4d6e4dc36d1a02fbedc2753a096848e7c1b0772f7654eab8e2c927dd53" + [[package]] name = "bumpalo" version = "3.13.0" @@ -233,23 +336,23 @@ checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cairo-rs" -version = "0.16.7" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "cairo-sys-rs", "glib", "libc", @@ -259,9 +362,9 @@ dependencies = [ [[package]] name = "cairo-sys-rs" -version = "0.16.3" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "glib-sys", "libc", @@ -270,25 +373,198 @@ dependencies = [ [[package]] name = "calloop" -version = "0.10.6" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "log", - "nix 0.25.1", - "slotmap", + "polling", + "rustix", + "slab", + "thiserror", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop", + "rustix", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "candle-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde6b117b2e56ee68959aad0cb5fdfe65f39328c8c82e5bd356a6b95ade471c7" +dependencies = [ + "byteorder", + "candle-gemm", + "half 2.4.0", + "memmap2 0.7.1", + "num-traits", + "num_cpus", + "rand 0.8.5", + "rand_distr", + "rayon", + "safetensors", + "thiserror", + "zip", +] + +[[package]] +name = "candle-gemm" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef9b07a4b0ba1a304b44432006580980ddff9748c201261c279437e7b11bba68" +dependencies = [ + "candle-gemm-c32", + "candle-gemm-c64", + "candle-gemm-common", + "candle-gemm-f16", + "candle-gemm-f32", + "candle-gemm-f64", + "dyn-stack", + "lazy_static", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "candle-gemm-c32" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f595241dad99811de285e029889f57c29dd98e33de7a8a6b881867b1488d7d4a" +dependencies = [ + "candle-gemm-common", + "dyn-stack", + "lazy_static", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "candle-gemm-c64" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "648f22fd8f5a4f330e29d791845b514966421308a6a2b5fedb949ee07e54c77f" +dependencies = [ + "candle-gemm-common", + "dyn-stack", + "lazy_static", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "candle-gemm-common" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e03c01b4ca3b9d71e4eb89e42946a08f8b0d2f1b861f7fa2ea0966233f1e0b08" +dependencies = [ + "dyn-stack", + "lazy_static", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "candle-gemm-f16" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97f8af2a482131713d28a337abff6debf26c529afa1837caf2ba190909b2107c" +dependencies = [ + "candle-gemm-common", + "candle-gemm-f32", + "dyn-stack", + "half 2.4.0", + "lazy_static", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "candle-gemm-f32" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938927961e2f0c0a6064fcf3524ea3f7f455fe5708419532a6fea9aea1ab45ae" +dependencies = [ + "candle-gemm-common", + "dyn-stack", + "lazy_static", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "candle-gemm-f64" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d192d7126e59b81ef4cf13cd9f194e6dbdc09171f65d0074d059dc009ac06775" +dependencies = [ + "candle-gemm-common", + "dyn-stack", + "lazy_static", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "candle-nn" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f65727276854c62e0d5b65e9e71b491d055477964943816e04da7dcda33852c" +dependencies = [ + "candle-core", + "half 2.4.0", + "num-traits", + "rayon", + "safetensors", + "serde", "thiserror", - "vec_map", ] [[package]] name = "cc" -version = "1.0.79" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -378,7 +654,7 @@ checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", - "libloading", + "libloading 0.7.4", ] [[package]] @@ -389,16 +665,16 @@ checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688" [[package]] name = "cocoa" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ "bitflags 1.3.2", "block", "cocoa-foundation", "core-foundation", "core-graphics", - "foreign-types", + "foreign-types 0.5.0", "libc", "objc", ] @@ -413,7 +689,7 @@ dependencies = [ "block", "core-foundation", "core-graphics-types", - "foreign-types", + "foreign-types 0.3.2", "libc", "objc", ] @@ -434,6 +710,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "convert_case" version = "0.5.0" @@ -464,14 +749,14 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core-graphics" -version = "0.22.3" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" dependencies = [ "bitflags 1.3.2", "core-foundation", "core-graphics-types", - "foreign-types", + "foreign-types 0.5.0", "libc", ] @@ -483,7 +768,7 @@ checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" dependencies = [ "bitflags 1.3.2", "core-foundation", - "foreign-types", + "foreign-types 0.3.2", "libc", ] @@ -521,7 +806,7 @@ dependencies = [ "js-sys", "libc", "mach2", - "ndk", + "ndk 0.7.0", "ndk-context", "oboe", "once_cell", @@ -553,36 +838,28 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.8.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -596,6 +873,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + [[package]] name = "dasp_sample" version = "0.11.0" @@ -645,7 +928,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading", + "libloading 0.8.3", ] [[package]] @@ -655,20 +938,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] -name = "either" -version = "1.8.1" +name = "dyn-stack" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "7fe7f8d7bcc523381d3c437b82cf74805de3931de0da69309ae0fe1bdf7a256e" +dependencies = [ + "bytemuck", + "reborrow", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "exr" version = "1.6.4" @@ -677,7 +986,7 @@ checksum = "279d3efcc55e19917fff7ab3ddd6c14afb6a90881a0078465196fe2f99d08c56" dependencies = [ "bit_field", "flume", - "half 2.2.1", + "half 2.4.0", "lebe", "miniz_oxide", "rayon-core", @@ -700,7 +1009,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset 0.9.0", + "memoffset", "rustc_version", ] @@ -739,7 +1048,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", ] [[package]] @@ -748,6 +1078,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "futures-channel" version = "0.3.28" @@ -788,7 +1124,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -819,11 +1155,10 @@ dependencies = [ [[package]] name = "gdk" -version = "0.16.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" dependencies = [ - "bitflags 1.3.2", "cairo-rs", "gdk-pixbuf", "gdk-sys", @@ -835,22 +1170,22 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.16.7" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "bitflags 1.3.2", "gdk-pixbuf-sys", "gio", "glib", "libc", + "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", "glib-sys", @@ -861,9 +1196,9 @@ dependencies = [ [[package]] name = "gdk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -877,10 +1212,20 @@ dependencies = [ ] [[package]] -name = "getrandom" -version = "0.2.10" +name = "gethostname" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "js-sys", @@ -891,9 +1236,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" dependencies = [ "color_quant", "weezl", @@ -901,11 +1246,10 @@ dependencies = [ [[package]] name = "gio" -version = "0.16.7" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" dependencies = [ - "bitflags 1.3.2", "futures-channel", "futures-core", "futures-io", @@ -921,9 +1265,9 @@ dependencies = [ [[package]] name = "gio-sys" -version = "0.16.3" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", @@ -934,20 +1278,20 @@ dependencies = [ [[package]] name = "glam" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad83ab008a4fa3b31dfa713dd41b5a9bdea1e94e4cf1e2fc274ffbd49b0271d3" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" dependencies = [ "mint", ] [[package]] name = "glib" -version = "0.16.9" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16aa2475c9debed5a32832cb5ff2af5a3f9e1ab9e69df58eaadc1ab2004d6eba" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "futures-channel", "futures-core", "futures-executor", @@ -958,6 +1302,7 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", + "memchr", "once_cell", "smallvec", "thiserror", @@ -965,24 +1310,23 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.16.8" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ - "anyhow", "heck", - "proc-macro-crate", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "glib-sys" -version = "0.16.3" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", "system-deps", @@ -996,9 +1340,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "gobject-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", @@ -1007,12 +1351,11 @@ dependencies = [ [[package]] name = "gtk" -version = "0.16.2" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" dependencies = [ "atk", - "bitflags 1.3.2", "cairo-rs", "field-offset", "futures-channel", @@ -1023,16 +1366,15 @@ dependencies = [ "gtk-sys", "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", ] [[package]] name = "gtk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1048,16 +1390,15 @@ dependencies = [ [[package]] name = "gtk3-macros" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" dependencies = [ - "anyhow", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] @@ -1068,11 +1409,15 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "half" -version = "2.2.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +checksum = "b5eceaaeec696539ddaf7b333340f1af35a5aa87ae3e4f3ead0532f72affab2e" dependencies = [ + "cfg-if", "crunchy", + "num-traits", + "rand 0.8.5", + "rand_distr", ] [[package]] @@ -1081,6 +1426,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + [[package]] name = "heck" version = "0.4.1" @@ -1098,9 +1449,9 @@ dependencies = [ [[package]] name = "hound" -version = "3.5.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d13cdbd5dbb29f9c88095bbdc2590c9cba0d0a1269b983fef6b2cdd7e9f4db1" +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" [[package]] name = "humantime" @@ -1108,7 +1459,7 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" dependencies = [ - "quick-error", + "quick-error 1.2.3", ] [[package]] @@ -1135,24 +1486,55 @@ dependencies = [ ] [[package]] -name = "image" -version = "0.24.6" +name = "icrate" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2", + "dispatch", + "objc2", +] + +[[package]] +name = "image" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b4f005360d32e9325029b38ba47ebd7a56f3316df09249368939562d518645" dependencies = [ "bytemuck", "byteorder", "color_quant", "exr", "gif", - "jpeg-decoder", - "num-rational", + "image-webp", "num-traits", "png", "qoi", + "ravif", + "rayon", + "rgb", "tiff", + "zune-core", + "zune-jpeg", ] +[[package]] +name = "image-webp" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a84a25dcae3ac487bc24ef280f9e20c79c9b1a3e5e32cbed3041d1c514aa87c" +dependencies = [ + "byteorder", + "thiserror", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + [[package]] name = "indexmap" version = "1.9.3" @@ -1160,7 +1542,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", ] [[package]] @@ -1170,9 +1562,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", ] [[package]] @@ -1182,10 +1582,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06d198e9919d9822d5f7083ba8530e04de87841eaf21ead9af8f2304efd57c89" [[package]] -name = "itoa" -version = "1.0.6" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jarvis-app" @@ -1201,13 +1610,13 @@ dependencies = [ "portaudio", "pv_porcupine", "pv_recorder", - "rand", + "rand 0.9.0-alpha.1", "rodio", "rustpotter", "seqdiff", "serde", "serde_json", - "serde_yaml 0.9.21", + "serde_yaml 0.9.33", "simple-log", "tray-icon", "vosk", @@ -1242,6 +1651,22 @@ dependencies = [ "walkdir", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni-sys" version = "0.3.0" @@ -1250,9 +1675,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" dependencies = [ "libc", ] @@ -1262,41 +1687,39 @@ name = "jpeg-decoder" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" -dependencies = [ - "rayon", -] [[package]] name = "js-sys" -version = "0.3.63" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] [[package]] name = "keyboard-types" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "serde", "unicode-segmentation", ] [[package]] name = "kira" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3974058fcf12557b10602f1145fd22d554815f0fb2fdc470441828cc0effa74e" +checksum = "8968f1eda49cdf4f6406fd5ffe590c3ca2778a1b0e50b5684974b138a99dfb2f" dependencies = [ "atomic-arena", "cpal", "glam", "mint", "ringbuf", + "send_wrapper", "symphonia", ] @@ -1331,9 +1754,9 @@ dependencies = [ [[package]] name = "libappindicator" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e1edfdc9b0853358306c6dfb4b77c79c779174256fe93d80c0b5ebca451a2f" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" dependencies = [ "glib", "gtk", @@ -1344,20 +1767,31 @@ dependencies = [ [[package]] name = "libappindicator-sys" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fcb2bea89cee9613982501ec83eaa2d09256b24540ae463c52a28906163918" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading", + "libloading 0.7.4", "once_cell", ] [[package]] name = "libc" -version = "0.2.146" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] [[package]] name = "libloading" @@ -1369,6 +1803,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.4", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libxdo" version = "0.6.0" @@ -1394,6 +1844,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + [[package]] name = "lock_api" version = "0.4.10" @@ -1406,9 +1862,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.18" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" dependencies = [ "serde", ] @@ -1443,6 +1899,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "mach2" version = "0.4.1" @@ -1462,36 +1927,37 @@ dependencies = [ ] [[package]] -name = "memchr" -version = "2.5.0" +name = "maybe-rayon" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memmap2" -version = "0.5.10" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6" dependencies = [ "libc", ] [[package]] -name = "memoffset" -version = "0.6.5" +name = "memmap2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", + "libc", ] [[package]] @@ -1525,28 +1991,14 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" -[[package]] -name = "mio" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - [[package]] name = "muda" -version = "0.5.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c820db003e601413e835a33b10cf51452b6415ef34ff1d862401826431c675" +checksum = "3e27c56b8cb9b3214d196556227b0eaa12db8393b4f919a0a93ffb67ed17d185" dependencies = [ "cocoa", "crossbeam-channel", - "gdk", - "gdk-pixbuf", "gtk", "keyboard-types", "libxdo", @@ -1554,7 +2006,7 @@ dependencies = [ "once_cell", "png", "thiserror", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1574,9 +2026,24 @@ checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags 1.3.2", "jni-sys", - "ndk-sys", - "num_enum", - "raw-window-handle", + "ndk-sys 0.4.1+23.1.7779620", + "num_enum 0.5.11", + "raw-window-handle 0.5.0", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.5.0", + "jni-sys", + "log", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum 0.7.2", + "raw-window-handle 0.6.0", "thiserror", ] @@ -1595,6 +2062,21 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.24.3" @@ -1604,20 +2086,6 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.6.5", ] [[package]] @@ -1630,6 +2098,12 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + [[package]] name = "num" version = "0.1.42" @@ -1641,6 +2115,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.3" @@ -1661,6 +2146,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -1689,6 +2185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", "num-integer", "num-traits", ] @@ -1700,6 +2197,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1718,7 +2216,16 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive 0.7.2", ] [[package]] @@ -1727,12 +2234,24 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.53", +] + [[package]] name = "objc" version = "0.2.7" @@ -1744,29 +2263,25 @@ dependencies = [ [[package]] name = "objc-sys" -version = "0.2.0-beta.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" +checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459" [[package]] name = "objc2" -version = "0.3.0-beta.3.patch-leaks.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" dependencies = [ - "block2", "objc-sys", "objc2-encode", ] [[package]] name = "objc2-encode" -version = "2.0.0-pre.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" -dependencies = [ - "objc-sys", -] +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" [[package]] name = "oboe" @@ -1775,9 +2290,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" dependencies = [ "jni 0.20.0", - "ndk", + "ndk 0.7.0", "ndk-context", - "num-derive", + "num-derive 0.3.3", "num-traits", "oboe-sys", ] @@ -1802,9 +2317,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "orbclient" @@ -1835,11 +2350,10 @@ dependencies = [ [[package]] name = "pango" -version = "0.16.5" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "bitflags 1.3.2", "gio", "glib", "libc", @@ -1849,9 +2363,9 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", @@ -1904,9 +2418,15 @@ dependencies = [ "libc", "redox_syscall 0.3.5", "smallvec", - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + [[package]] name = "peeking_take_while" version = "0.1.2" @@ -1915,35 +2435,35 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -1953,9 +2473,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "platform-dirs" @@ -1979,6 +2499,20 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "portaudio" version = "0.7.0" @@ -2013,7 +2547,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -2042,31 +2586,50 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.60" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] [[package]] -name = "pv_porcupine" -version = "2.2.1" +name = "profiling" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae7af04db856a9c23f9f35f5b4b3a224dc4d16555a0f1079f3573127f429d102" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.53", +] + +[[package]] +name = "pv_porcupine" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e6218ff1a325195f04a009398566e9eb343ccbfccce203b31ba3b82eb3cac63" dependencies = [ "libc", - "libloading", + "libloading 0.8.3", ] [[package]] name = "pv_recorder" -version = "1.1.2" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695fa4ace21418ae0dd58626babf2c7a40db6b8e12dd371f1eb297328f7de927" +checksum = "28cb1418c740637db95cb7aea6052d655f5affc8e89a86ab999d1318e3b79a4e" dependencies = [ "libc", - "libloading", + "libloading 0.8.3", ] [[package]] @@ -2085,10 +2648,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] -name = "quote" -version = "1.0.28" +name = "quick-error" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -2100,8 +2678,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31e63ea85be51c423e52ba8f2e68a3efd53eed30203ee029dd09947333693e" +dependencies = [ + "rand_chacha 0.9.0-alpha.1", + "rand_core 0.9.0-alpha.1", + "zerocopy 0.8.0-alpha.6", ] [[package]] @@ -2111,7 +2700,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78674ef918c19451dbd250f8201f8619b494f64c9aa6f3adb28fd8a0f1f6da46" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.0-alpha.1", ] [[package]] @@ -2123,6 +2722,85 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_core" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc89dffba8377c5ec847d12bb41492bda235dba31a25e8b695cd0fe6589eb8c9" +dependencies = [ + "getrandom", + "zerocopy 0.8.0-alpha.6", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive 0.4.2", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand 0.8.5", + "rand_chacha 0.3.1", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error 2.0.1", + "rav1e", + "rayon", + "rgb", +] + +[[package]] +name = "raw-cpuid" +version = "10.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "raw-window-handle" version = "0.5.0" @@ -2133,10 +2811,16 @@ dependencies = [ ] [[package]] -name = "rayon" -version = "1.7.0" +name = "raw-window-handle" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + +[[package]] +name = "rayon" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" dependencies = [ "either", "rayon-core", @@ -2144,14 +2828,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -2163,6 +2845,12 @@ dependencies = [ "rustfft", ] +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + [[package]] name = "redox_syscall" version = "0.1.57" @@ -2200,18 +2888,41 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.4" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] [[package]] name = "ringbuf" @@ -2224,9 +2935,9 @@ dependencies = [ [[package]] name = "rodio" -version = "0.17.1" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf1d4dea18dff2e9eb6dca123724f8b60ef44ad74a9ad283cdfe025df7e73fa" +checksum = "3b1bb7b48ee48471f55da122c0044fcc7600cfcc85db88240b89cb832935e611" dependencies = [ "claxon", "cpal", @@ -2237,9 +2948,9 @@ dependencies = [ [[package]] name = "rubato" -version = "0.12.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70209c27d5b08f5528bdc779ea3ffb418954e28987f9f9775c6eac41003f9c" +checksum = "e6dd52e80cfc21894deadf554a5673002938ae4625f7a283e536f9cf7c17b0d5" dependencies = [ "num-complex", "num-integer", @@ -2278,11 +2989,26 @@ dependencies = [ ] [[package]] -name = "rustpotter" -version = "2.0.0" +name = "rustix" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a88d0514dd5dcc988c78f61be4f60fdb37d4872e23c7d8d6d2d3ea23655f97" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustpotter" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc656425c55521e7fbd6445b66d588827dbe673f89c0491628345f073147696c" +dependencies = [ + "candle-core", + "candle-nn", "ciborium", "hound", "rubato", @@ -2292,9 +3018,19 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "safetensors" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93279b86b3de76f820a8854dd06cbc33cfa57a417b19c47f6a25280112fb1df" +dependencies = [ + "serde", + "serde_json", +] [[package]] name = "same-file" @@ -2313,28 +3049,40 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" -version = "0.5.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" +checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" dependencies = [ "ab_glyph", "log", - "memmap2", + "memmap2 0.9.4", "smithay-client-toolkit", "tiny-skia", ] [[package]] name = "semver" -version = "1.0.17" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "seq-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "seqdiff" @@ -2344,9 +3092,9 @@ checksum = "e058ed56aee6d266fa5aa7809f99899b07d350c30aecd4f3d859b4f0d9dbbbdf" [[package]] name = "serde" -version = "1.0.164" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] @@ -2363,20 +3111,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.164" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa", "ryu", @@ -2385,9 +3133,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.2" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93107647184f6027e3b7dcb2e11034cf95ffa1e3a682c67951963ac69c1c007d" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -2398,7 +3146,7 @@ version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ - "indexmap", + "indexmap 1.9.3", "ryu", "serde", "yaml-rust", @@ -2406,11 +3154,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.21" +version = "0.9.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" +checksum = "a0623d197252096520c6f2a5e1171ee436e5af99a5d7caa2891e55e61950e6d9" dependencies = [ - "indexmap", + "indexmap 2.2.5", "itoa", "ryu", "serde", @@ -2429,6 +3177,15 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "simple-log" version = "1.6.0" @@ -2445,22 +3202,13 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] -[[package]] -name = "slotmap" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" -dependencies = [ - "version_check", -] - [[package]] name = "smallvec" version = "1.10.0" @@ -2469,21 +3217,36 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "smithay-client-toolkit" -version = "0.16.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "calloop", - "dlib", - "lazy_static", + "calloop-wayland-source", + "cursor-icon", + "libc", "log", - "memmap2", - "nix 0.24.3", - "pkg-config", + "memmap2 0.9.4", + "rustix", + "thiserror", + "wayland-backend", "wayland-client", + "wayland-csd-frame", "wayland-cursor", "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", ] [[package]] @@ -2641,9 +3404,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -2671,22 +3434,22 @@ checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -2702,9 +3465,9 @@ dependencies = [ [[package]] name = "tiff" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ "flate2", "jpeg-decoder", @@ -2724,23 +3487,23 @@ dependencies = [ [[package]] name = "tiny-skia" -version = "0.8.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" dependencies = [ "arrayref", "arrayvec", "bytemuck", "cfg-if", - "png", + "log", "tiny-skia-path", ] [[package]] name = "tiny-skia-path" -version = "0.8.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" dependencies = [ "arrayref", "bytemuck", @@ -2764,38 +3527,65 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml" -version = "0.7.3" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.19.15", ] [[package]] name = "toml_datetime" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.8" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.5", "serde", "serde_spanned", "toml_datetime", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.5", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" + [[package]] name = "transpose" version = "0.2.2" @@ -2808,9 +3598,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.5.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a1ba93b51da357afb4064093d925ded565154aca52f60d5a088b826150d7a8" +checksum = "454035ff34b8430638c894e6197748578d6b4d449c6edaf8ea854d94e2dd862b" dependencies = [ "cocoa", "core-graphics", @@ -2822,7 +3612,7 @@ dependencies = [ "once_cell", "png", "thiserror", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2833,9 +3623,9 @@ checksum = "44dcf002ae3b32cd25400d6df128c5babec3927cd1eb7ce813cfff20eb6c3746" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-segmentation" @@ -2845,15 +3635,20 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unsafe-libyaml" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] -name = "vec_map" -version = "0.8.2" +name = "v_frame" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] [[package]] name = "version-compare" @@ -2908,9 +3703,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2918,16 +3713,16 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", "wasm-bindgen-shared", ] @@ -2945,9 +3740,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2955,101 +3750,147 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] -name = "wayland-client" -version = "0.29.5" +name = "wayland-backend" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" dependencies = [ - "bitflags 1.3.2", + "cc", "downcast-rs", - "libc", - "nix 0.24.3", + "rustix", "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys", -] - -[[package]] -name = "wayland-commons" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" -dependencies = [ - "nix 0.24.3", - "once_cell", "smallvec", "wayland-sys", ] [[package]] -name = "wayland-cursor" -version = "0.29.5" +name = "wayland-client" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" dependencies = [ - "nix 0.24.3", + "bitflags 2.5.0", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.5.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" +dependencies = [ + "rustix", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.29.5" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", + "wayland-backend", "wayland-client", - "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", "wayland-scanner", ] [[package]] name = "wayland-scanner" -version = "0.29.5" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" dependencies = [ "proc-macro2", + "quick-xml", "quote", - "xml-rs", ] [[package]] name = "wayland-sys" -version = "0.29.5" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" dependencies = [ "dlib", - "lazy_static", + "log", + "once_cell", "pkg-config", ] [[package]] name = "web-sys" -version = "0.3.63" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" dependencies = [ "js-sys", "wasm-bindgen", @@ -3057,9 +3898,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "winapi" @@ -3079,9 +3920,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -3107,7 +3948,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] @@ -3125,7 +3966,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", ] [[package]] @@ -3145,17 +3995,32 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -3166,9 +4031,15 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" @@ -3178,9 +4049,15 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" @@ -3190,9 +4067,15 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" @@ -3202,9 +4085,15 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" @@ -3214,9 +4103,15 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" @@ -3226,9 +4121,15 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" @@ -3238,50 +4139,69 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[package]] name = "winit" -version = "0.28.6" +version = "0.29.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "866db3f712fffba75d31bf0cdecf357c8aeafd158c5b7ab51dba2a2b2d47f196" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" dependencies = [ + "ahash", "android-activity", - "bitflags 1.3.2", + "atomic-waker", + "bitflags 2.5.0", + "bytemuck", + "calloop", "cfg_aliases", "core-foundation", "core-graphics", - "dispatch", - "instant", + "cursor-icon", + "icrate", + "js-sys", "libc", "log", - "mio", - "ndk", + "memmap2 0.9.4", + "ndk 0.8.0", + "ndk-sys 0.5.0+25.2.9519653", "objc2", "once_cell", "orbclient", "percent-encoding", - "raw-window-handle", + "raw-window-handle 0.6.0", "redox_syscall 0.3.5", + "rustix", "sctk-adwaita", "smithay-client-toolkit", + "smol_str", + "unicode-segmentation", "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", "wayland-client", - "wayland-commons", "wayland-protocols", - "wayland-scanner", + "wayland-protocols-plasma", "web-sys", - "windows-sys 0.45.0", + "web-time", + "windows-sys 0.48.0", "x11-dl", + "x11rb", + "xkbcommon-dl", ] [[package]] name = "winnow" -version = "0.4.1" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -3307,6 +4227,27 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "x11rb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading 0.8.3", + "once_cell", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" + [[package]] name = "xcursor" version = "0.3.4" @@ -3317,10 +4258,23 @@ dependencies = [ ] [[package]] -name = "xml-rs" -version = "0.8.14" +name = "xkbcommon-dl" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52839dc911083a8ef63efa4d039d1f58b5e409f923e44c80828f206f66e5541c" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.5.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" [[package]] name = "yaml-rust" @@ -3331,6 +4285,63 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive 0.7.32", +] + +[[package]] +name = "zerocopy" +version = "0.8.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db678a6ee512bd06adf35c35be471cae2f9c82a5aed2b5d15e03628c98bddd57" +dependencies = [ + "zerocopy-derive 0.8.0-alpha.6", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201585ea96d37ee69f2ac769925ca57160cef31acb137c16f38b02b76f4c1e62" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + [[package]] name = "zune-inflate" version = "0.2.54" @@ -3339,3 +4350,12 @@ checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] diff --git a/app/Cargo.toml b/app/Cargo.toml index 47bdd5a..fc704a5 100644 --- a/app/Cargo.toml +++ b/app/Cargo.toml @@ -10,26 +10,28 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde = { version = "1.0.164", features = ["derive"] } -serde_json = "1.0.96" -hound = "3.5.0" -pv_recorder = "1.1.2" -pv_porcupine = "2.2.1" +serde = { version = "1.0.197", features = ["derive"] } +serde_json = "1.0.114" +hound = "3.5.1" +pv_recorder = "1.2.2" +pv_porcupine = "3.0.2" seqdiff = "0.3.0" vosk = "0.2.0" -rand = "0.8.5" -rodio = "0.17.1" -rustpotter = "2.0.0" -log = "0.4.18" -once_cell = "1.18.0" -atomic_enum = "0.2.0" +rand = "0.9.0-alpha.1" +rodio = "0.17.3" +rustpotter = "3.0.2" +log = "0.4.21" +once_cell = "1.19.0" +atomic_enum = "0.3.0" portaudio = "0.7.0" platform-dirs = "0.3.0" simple-log = "1.6.0" -tray-icon = { version = "0.5.1" } -winit = "0.28.6" -image = "0.24.6" -serde_yaml = "0.9.21" -kira = "0.8.3" +tray-icon = { version = "0.12.0" } +winit = "0.29.15" +image = "0.25.0" +serde_yaml = "0.9.33" +kira = "0.8.7" [features] +default = ["jarvis_app"] +jarvis_app = [] # feature flag saying this is an app \ No newline at end of file diff --git a/app/post_build.py b/app/post_build.py index ddf1e5e..bb37092 100644 --- a/app/post_build.py +++ b/app/post_build.py @@ -15,6 +15,8 @@ SOURCE = ( "vosk/", "lib/", "keywords/", + "rustpotter/", + "sound/", "libgcc_s_seh-1.dll", "libstdc++-6.dll", "libvosk.dll", diff --git a/app/src/app.rs b/app/src/app.rs index 2cd19d5..81d40df 100644 --- a/app/src/app.rs +++ b/app/src/app.rs @@ -1,7 +1,7 @@ use std::time::SystemTime; -use crate::{config, audio, recorder, listener, stt, commands, COMMANDS_LIST}; -use rand::seq::SliceRandom; +use crate::{audio, commands, config, listener, recorder, stt, COMMANDS_LIST}; +use rand::seq::IndexedRandom; pub fn start() -> Result<(), ()> { // start the loop @@ -41,7 +41,12 @@ fn main_loop() -> Result<(), ()> { // play some greet phrase // @TODO. Make it via commands or upcoming events system. - audio::play_sound(&sounds_directory.join(format!("{}.wav", config::ASSISTANT_GREET_PHRASES.choose(&mut rand::thread_rng()).unwrap()))); + audio::play_sound(&sounds_directory.join(format!( + "{}.wav", + config::ASSISTANT_GREET_PHRASES + .choose(&mut rand::thread_rng()) + .unwrap() + ))); // wait for voice commands 'voice_recognition: loop { @@ -62,7 +67,10 @@ fn main_loop() -> Result<(), ()> { recognized_voice = recognized_voice.trim().into(); // infer command - if let Some((cmd_path, cmd_config)) = commands::fetch_command(&recognized_voice, &COMMANDS_LIST.get().unwrap()) { + if let Some((cmd_path, cmd_config)) = commands::fetch_command( + &recognized_voice, + &COMMANDS_LIST.get().unwrap(), + ) { // some debug info info!("Recognized voice (filtered): {}", recognized_voice); info!("Command found: {:?}", cmd_path); @@ -79,11 +87,13 @@ fn main_loop() -> Result<(), ()> { start = SystemTime::now(); } else { // skip, if chaining is not required - start = start.checked_sub(core::time::Duration::from_secs(1000)).unwrap(); + start = start + .checked_sub(core::time::Duration::from_secs(1000)) + .unwrap(); } continue 'voice_recognition; // continue voice recognition - }, + } Err(msg) => { // fail error!("Error executing command: {}", msg); @@ -100,23 +110,21 @@ fn main_loop() -> Result<(), ()> { Ok(elapsed) if elapsed > config::CMS_WAIT_DELAY => { // return to wake-word listening after N seconds break 'voice_recognition; - }, - _ => () + } + _ => (), } } - }, - None => () + } + None => (), } } Ok(()) } -fn keyword_callback(keyword_index: i32) { - -} +fn keyword_callback(keyword_index: i32) {} pub fn close(code: i32) { info!("Closing application."); std::process::exit(code); -} \ No newline at end of file +} diff --git a/app/src/audio.rs b/app/src/audio.rs index 598c580..30786c2 100644 --- a/app/src/audio.rs +++ b/app/src/audio.rs @@ -1,18 +1,19 @@ -mod rodio; mod kira; +mod rodio; +use once_cell::sync::OnceCell; use std::cmp::Ordering; use std::path::PathBuf; -use once_cell::sync::OnceCell; -use crate::{config, DB, SOUND_DIR}; use crate::config::structs::AudioType; +use crate::{config, DB, SOUND_DIR}; static AUDIO_TYPE: OnceCell = OnceCell::new(); - pub fn init() -> Result<(), ()> { - if !AUDIO_TYPE.get().is_none() {return Ok(());} // already initialized + if !AUDIO_TYPE.get().is_none() { + return Ok(()); + } // already initialized // set default audio type // @TODO. Make it configurable? @@ -27,14 +28,14 @@ pub fn init() -> Result<(), ()> { match rodio::init() { Ok(_) => { info!("Successfully initialized Rodio audio backend."); - }, + } Err(msg) => { error!("Failed to initialize Rodio audio backend."); - return Err(()) + return Err(()); } } - }, + } AudioType::Kira => { // Init Kira info!("Initializing Kira audio backend."); @@ -42,11 +43,11 @@ pub fn init() -> Result<(), ()> { match kira::init() { Ok(_) => { info!("Successfully initialized Kira audio backend."); - }, + } Err(msg) => { error!("Failed to initialize Kira audio backend."); - return Err(()) + return Err(()); } } } @@ -61,10 +62,8 @@ pub fn play_sound(filename: &PathBuf) { match AUDIO_TYPE.get().unwrap() { AudioType::Rodio => { rodio::play_sound(filename, true); - }, - AudioType::Kira => { - kira::play_sound(filename) } + AudioType::Kira => kira::play_sound(filename), } } @@ -79,8 +78,11 @@ pub fn get_sound_directory() -> Option { match default_voice_path.exists() { true => Some(default_voice_path), - _ => None + _ => { + error!("No sounds found. Search path - {:?}", voice_path); + None + } } } } -} \ No newline at end of file +} diff --git a/app/src/audio/kira.rs b/app/src/audio/kira.rs index f158a4b..83f14e9 100644 --- a/app/src/audio/kira.rs +++ b/app/src/audio/kira.rs @@ -1,20 +1,19 @@ +use once_cell::sync::OnceCell; use std::path::PathBuf; use std::sync::Mutex; -use once_cell::sync::OnceCell; use kira::{ - manager::{ - AudioManager, AudioManagerSettings, - backend::DefaultBackend, - }, - sound::static_sound::{StaticSoundData, StaticSoundSettings}, + manager::{backend::DefaultBackend, AudioManager, AudioManagerSettings}, + sound::static_sound::{StaticSoundData, StaticSoundSettings}, }; thread_local!(static MANAGER: OnceCell> = OnceCell::new()); pub fn init() -> Result<(), ()> { MANAGER.with(|m| { - if !m.get().is_none() {return Ok(());} // already initialized + if !m.get().is_none() { + return Ok(()); + } // already initialized // Create an audio manager. This plays sounds and manages resources. match AudioManager::::new(AudioManagerSettings::default()) { @@ -24,7 +23,7 @@ pub fn init() -> Result<(), ()> { // success Ok(()) - }, + } Err(msg) => { error!("Failed to initialize audio stream.\nError details: {}", msg); @@ -47,9 +46,9 @@ pub fn play_sound(filename: &PathBuf) { let audio_manager = &mut m.get().unwrap().lock().unwrap(); audio_manager.play(sound_data.clone()).unwrap(); }); - }, + } Err(msg) => { warn!("Cannot find sound file: {}", filename.display()); } } -} \ No newline at end of file +} diff --git a/app/src/audio/rodio.rs b/app/src/audio/rodio.rs index 721a55d..18e5877 100644 --- a/app/src/audio/rodio.rs +++ b/app/src/audio/rodio.rs @@ -4,10 +4,10 @@ Possible fixes are running rodio in a separate thread or smthng. */ -use std::fs::File; -use std::path::PathBuf; -use std::io::BufReader; use once_cell::sync::OnceCell; +use std::fs::File; +use std::io::BufReader; +use std::path::PathBuf; use rodio::{Decoder, OutputStream, OutputStreamHandle, Sink}; @@ -16,7 +16,9 @@ static STREAM_HANDLE: OnceCell = OnceCell::new(); static SINK: OnceCell = OnceCell::new(); pub fn init() -> Result<(), ()> { - if !STREAM_HANDLE.get().is_none() {return Ok(());} // already initialized + if !STREAM_HANDLE.get().is_none() { + return Ok(()); + } // already initialized // get output stream handle to the default physical sound device match OutputStream::try_default() { @@ -30,12 +32,12 @@ pub fn init() -> Result<(), ()> { Ok(s) => { info!("Sink initialized."); sink = s; - }, + } Err(msg) => { error!("Cannot create sink.\nError details: {}", msg); // failed - return Err(()) + return Err(()); } } @@ -46,7 +48,7 @@ pub fn init() -> Result<(), ()> { // success Ok(()) - }, + } Err(msg) => { error!("Failed to initialize audio stream.\nError details: {}", msg); @@ -73,4 +75,4 @@ pub fn play_sound(filename: &PathBuf, sleep: bool) { // has finished playing all its queued sounds. SINK.get().unwrap().sleep_until_end(); } -} \ No newline at end of file +} diff --git a/app/src/commands.rs b/app/src/commands.rs index cc171b9..f159d88 100644 --- a/app/src/commands.rs +++ b/app/src/commands.rs @@ -1,4 +1,4 @@ -use rand::seq::SliceRandom; +use rand::seq::IndexedRandom; use seqdiff::ratio; use serde_yaml; use std::path::Path; @@ -6,13 +6,13 @@ use std::{fs, fs::File}; use core::time::Duration; use std::path::PathBuf; -use std::process::{Command, Child}; +use std::process::{Child, Command}; // use tauri::Manager; mod structs; pub use structs::*; -use crate::{config, audio}; +use crate::{audio, config}; // @TODO. Allow commands both in yaml and json format. pub fn parse_commands() -> Result, String> { @@ -35,9 +35,13 @@ pub fn parse_commands() -> Result, String> { match serde_yaml::from_reader::(cc_reader) { Ok(parse_result) => { cc_yaml = parse_result; - }, + } Err(msg) => { - warn!("Can't parse {}, skipping ...\nCommand parse error is: {:?}", &cc_file.display(), msg); + warn!( + "Can't parse {}, skipping ...\nCommand parse error is: {:?}", + &cc_file.display(), + msg + ); continue; } } @@ -98,7 +102,10 @@ pub fn fetch_command<'a>( if let Some((cmd_path, scmd)) = result_scmd { println!("Ratio is: {}", current_max_ratio); - info!("CMD is: {cmd_path:?}, SCMD is: {scmd:?}, Ratio is: {}", current_max_ratio); + info!( + "CMD is: {cmd_path:?}, SCMD is: {scmd:?}, Ratio is: {}", + current_max_ratio + ); Some((&cmd_path, &scmd)) } else { None @@ -111,21 +118,12 @@ pub fn execute_exe(exe: &str, args: &Vec) -> std::io::Result { } pub fn execute_cli(cmd: &str, args: &Vec) -> std::io::Result { - println!("Spawning cmd as: cmd /C {} {:?}", cmd, args); if cfg!(target_os = "windows") { - Command::new("cmd") - .arg("/C") - .arg(cmd) - .args(args) - .spawn() + Command::new("cmd").arg("/C").arg(cmd).args(args).spawn() } else { - Command::new("sh") - .arg("-c") - .arg(cmd) - .args(args) - .spawn() + Command::new("sh").arg("-c").arg(cmd).args(args).spawn() } } @@ -139,7 +137,14 @@ pub fn execute_command( match cmd_config.command.action.as_str() { "voice" => { // VOICE command type - let random_cmd_sound = format!("{}.wav", cmd_config.voice.sounds.choose(&mut rand::thread_rng()).unwrap()); + let random_cmd_sound = format!( + "{}.wav", + cmd_config + .voice + .sounds + .choose(&mut rand::thread_rng()) + .unwrap() + ); // events::play(random_cmd_sound, app_handle); audio::play_sound(&sounds_directory.join(random_cmd_sound)); @@ -158,7 +163,14 @@ pub fn execute_command( }, &cmd_config.command.exe_args, ) { - let random_cmd_sound = format!("{}.wav", cmd_config.voice.sounds.choose(&mut rand::thread_rng()).unwrap()); + let random_cmd_sound = format!( + "{}.wav", + cmd_config + .voice + .sounds + .choose(&mut rand::thread_rng()) + .unwrap() + ); // events::play(random_cmd_sound, app_handle); audio::play_sound(&sounds_directory.join(random_cmd_sound)); @@ -172,17 +184,21 @@ pub fn execute_command( // CLI command type let cli_cmd = &cmd_config.command.cli_cmd; - match execute_cli( - cli_cmd, - &cmd_config.command.cli_args, - ) { - Ok(_) => { - let random_cmd_sound = format!("{}.wav", cmd_config.voice.sounds.choose(&mut rand::thread_rng()).unwrap()); + match execute_cli(cli_cmd, &cmd_config.command.cli_args) { + Ok(_) => { + let random_cmd_sound = format!( + "{}.wav", + cmd_config + .voice + .sounds + .choose(&mut rand::thread_rng()) + .unwrap() + ); // events::play(random_cmd_sound, app_handle); - audio::play_sound(&sounds_directory.join(random_cmd_sound)); + audio::play_sound(&sounds_directory.join(random_cmd_sound)); Ok(true) - }, + } Err(msg) => { error!("CLI command error ({})", msg); Err(format!("Shell command error ({})", msg).into()) @@ -191,7 +207,14 @@ pub fn execute_command( } "terminate" => { // TERMINATE command type - let random_cmd_sound = format!("{}.wav", cmd_config.voice.sounds.choose(&mut rand::thread_rng()).unwrap()); + let random_cmd_sound = format!( + "{}.wav", + cmd_config + .voice + .sounds + .choose(&mut rand::thread_rng()) + .unwrap() + ); // events::play(random_cmd_sound, app_handle); audio::play_sound(&sounds_directory.join(random_cmd_sound)); @@ -200,7 +223,14 @@ pub fn execute_command( } "stop_chaining" => { // STOP_CHAINING command type - let random_cmd_sound = format!("{}.wav", cmd_config.voice.sounds.choose(&mut rand::thread_rng()).unwrap()); + let random_cmd_sound = format!( + "{}.wav", + cmd_config + .voice + .sounds + .choose(&mut rand::thread_rng()) + .unwrap() + ); // events::play(random_cmd_sound, app_handle); audio::play_sound(&sounds_directory.join(random_cmd_sound)); @@ -209,7 +239,7 @@ pub fn execute_command( _ => { error!("Command type unknown"); Err("Command type unknown".into()) - }, + } } } @@ -222,4 +252,4 @@ pub fn list(from: &[AssistantCommand]) -> Vec { } out -} \ No newline at end of file +} diff --git a/app/src/commands/structs.rs b/app/src/commands/structs.rs index 3c97f59..fad3b17 100644 --- a/app/src/commands/structs.rs +++ b/app/src/commands/structs.rs @@ -35,12 +35,11 @@ pub struct ConfigCommandSection { pub cli_cmd: String, #[serde(default)] - pub cli_args: Vec + pub cli_args: Vec, } #[derive(Deserialize, Debug)] pub struct ConfigVoiceSection { - #[serde(default)] pub sounds: Vec, } diff --git a/app/src/config.rs b/app/src/config.rs index b4045bc..921b3af 100644 --- a/app/src/config.rs +++ b/app/src/config.rs @@ -1,21 +1,25 @@ pub mod structs; -use structs::WakeWordEngine; -use structs::SpeechToTextEngine; -use structs::RecorderType; use structs::AudioType; +use structs::RecorderType; +use structs::SpeechToTextEngine; +use structs::WakeWordEngine; -use std::fs; -use std::env; -use std::path::PathBuf; use once_cell::sync::Lazy; +use std::env; +use std::fs; +use std::path::PathBuf; -use platform_dirs::{AppDirs}; -use rustpotter::{RustpotterConfig, WavFmt, DetectorConfig, FiltersConfig, ScoreMode, GainNormalizationConfig, BandPassConfig}; +use platform_dirs::AppDirs; -use crate::{config, APP_DIRS, APP_CONFIG_DIR, APP_LOG_DIR}; +#[cfg(feature="jarvis_app")] +use rustpotter::{ + AudioFmt, BandPassConfig, DetectorConfig, FiltersConfig, GainNormalizationConfig, + RustpotterConfig, ScoreMode, +}; + +use crate::{config, APP_CONFIG_DIR, APP_DIRS, APP_LOG_DIR}; #[allow(dead_code)] - pub fn init_dirs() -> Result<(), String> { // infer app dirs if APP_DIRS.get().is_some() { @@ -23,7 +27,9 @@ pub fn init_dirs() -> Result<(), String> { } // cache_dir, config_dir, data_dir, state_dir - APP_DIRS.set(AppDirs::new(Some(config::BUNDLE_IDENTIFIER), false).unwrap()).unwrap(); + APP_DIRS + .set(AppDirs::new(Some(config::BUNDLE_IDENTIFIER), false).unwrap()) + .unwrap(); // setup directories let mut config_dir = PathBuf::from(&APP_DIRS.get().unwrap().config_dir); @@ -33,7 +39,8 @@ pub fn init_dirs() -> Result<(), String> { if !config_dir.exists() { if fs::create_dir_all(&config_dir).is_err() { config_dir = env::current_dir().expect("Cannot infer the config directory"); - fs::create_dir_all(&config_dir).expect("Cannot create config directory, access denied?"); + fs::create_dir_all(&config_dir) + .expect("Cannot create config directory, access denied?"); } } @@ -51,10 +58,9 @@ pub fn init_dirs() -> Result<(), String> { Ok(()) } - /* - Defaults. - */ + Defaults. +*/ pub const DEFAULT_AUDIO_TYPE: AudioType = AudioType::Kira; pub const DEFAULT_RECORDER_TYPE: RecorderType = RecorderType::PvRecorder; pub const DEFAULT_WAKE_WORD_ENGINE: WakeWordEngine = WakeWordEngine::Rustpotter; @@ -72,23 +78,29 @@ pub const TG_OFFICIAL_LINK: Option<&str> = Some("https://t.me/howdyho_official") pub const FEEDBACK_LINK: Option<&str> = Some("https://t.me/jarvis_feedback_bot"); /* - Tray. - */ + Tray. +*/ pub const TRAY_ICON: &str = "32x32.png"; pub const TRAY_TOOLTIP: &str = "Jarvis Voice Assistant"; // RUSPOTTER +#[cfg(feature="jarvis_app")] pub const RUSPOTTER_MIN_SCORE: f32 = 0.62; +#[cfg(feature="jarvis_app")] pub const RUSTPOTTER_DEFAULT_CONFIG: Lazy = Lazy::new(|| { RustpotterConfig { - fmt: WavFmt::default(), + fmt: AudioFmt::default(), detector: DetectorConfig { avg_threshold: 0., threshold: 0.5, min_scores: 15, - score_mode: ScoreMode::Average, - comparator_band_size: 5, - comparator_ref: 0.22 + score_ref: 0.22, + band_size: 5, + vad_mode: None, + score_mode: ScoreMode::Max, + eager: false, + // comparator_band_size: 5, + // comparator_ref: 0.22 }, filters: FiltersConfig { gain_normalizer: GainNormalizationConfig { @@ -101,8 +113,8 @@ pub const RUSTPOTTER_DEFAULT_CONFIG: Lazy = Lazy::new(|| { enabled: true, low_cutoff: 80., high_cutoff: 400., - } - } + }, + }, } }); diff --git a/app/src/config/structs.rs b/app/src/config/structs.rs index e33f236..e763b4d 100644 --- a/app/src/config/structs.rs +++ b/app/src/config/structs.rs @@ -1,30 +1,43 @@ +use std::fmt; use serde::{Deserialize, Serialize}; #[derive(Clone, Copy, Serialize, Deserialize, Debug)] pub enum WakeWordEngine { Rustpotter, Vosk, - Porcupine + Porcupine, +} + +impl fmt::Display for WakeWordEngine { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:?}", self) + } } #[derive(Serialize, Deserialize, Debug)] pub enum SpeechToTextEngine { - Vosk + Vosk, +} + +impl fmt::Display for SpeechToTextEngine { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:?}", self) + } } #[derive(PartialEq, Debug)] pub enum RecorderType { Cpal, PvRecorder, - PortAudio + PortAudio, } #[derive(PartialEq, Debug)] pub enum AudioType { Rodio, - Kira + Kira, } // pub enum TextToSpeechEngine {} -// pub enum IntentRecognitionEngine {} \ No newline at end of file +// pub enum IntentRecognitionEngine {} diff --git a/app/src/db.rs b/app/src/db.rs index 9fed42e..8d4395f 100644 --- a/app/src/db.rs +++ b/app/src/db.rs @@ -1,22 +1,29 @@ pub mod structs; use crate::{config, APP_CONFIG_DIR}; -use std::path::PathBuf; +use log::info; use std::fs::File; use std::io::{BufReader, Read}; -use log::info; +use std::path::PathBuf; use serde_json; fn get_db_file_path() -> PathBuf { - PathBuf::from(format!("{}/{}", APP_CONFIG_DIR.get().unwrap().display(), config::DB_FILE_NAME)) + PathBuf::from(format!( + "{}/{}", + APP_CONFIG_DIR.get().unwrap().display(), + config::DB_FILE_NAME + )) } pub fn init_settings() -> structs::Settings { let mut db = None; let db_file_path = get_db_file_path(); - info!("Loading settings db file located at: {}", db_file_path.display()); + info!( + "Loading settings db file located at: {}", + db_file_path.display() + ); if db_file_path.exists() { // try load existing settings @@ -43,9 +50,9 @@ pub fn save_settings(settings: &structs::Settings) -> Result<(), std::io::Error> std::fs::write( db_file_path, - serde_json::to_string_pretty(&settings).unwrap() + serde_json::to_string_pretty(&settings).unwrap(), )?; info!("Settings saved."); Ok(()) -} \ No newline at end of file +} diff --git a/app/src/db/structs.rs b/app/src/db/structs.rs index 768fe91..c62a43d 100644 --- a/app/src/db/structs.rs +++ b/app/src/db/structs.rs @@ -1,8 +1,8 @@ -use serde::{Deserialize, Serialize}; use crate::config; +use serde::{Deserialize, Serialize}; -use crate::config::structs::WakeWordEngine; use crate::config::structs::SpeechToTextEngine; +use crate::config::structs::WakeWordEngine; #[derive(Serialize, Deserialize, Debug)] pub struct Settings { @@ -12,7 +12,7 @@ pub struct Settings { pub wake_word_engine: WakeWordEngine, pub speech_to_text_engine: SpeechToTextEngine, - pub api_keys: ApiKeys + pub api_keys: ApiKeys, } impl Default for Settings { @@ -26,8 +26,8 @@ impl Default for Settings { api_keys: ApiKeys { picovoice: String::from(""), - openai: String::from("") - } + openai: String::from(""), + }, } } } @@ -35,5 +35,5 @@ impl Default for Settings { #[derive(Serialize, Deserialize, Debug)] pub struct ApiKeys { pub picovoice: String, - pub openai: String -} \ No newline at end of file + pub openai: String, +} diff --git a/app/src/listener.rs b/app/src/listener.rs index 43fe1cd..f6160da 100644 --- a/app/src/listener.rs +++ b/app/src/listener.rs @@ -7,8 +7,8 @@ mod vosk; use once_cell::sync::OnceCell; use std::sync::atomic::{AtomicBool, Ordering}; -use crate::{config, stt}; use crate::config::structs::WakeWordEngine; +use crate::{config, stt}; use crate::DB; @@ -19,10 +19,14 @@ static WAKE_WORD_ENGINE: OnceCell = OnceCell::new(); static LISTENING: AtomicBool = AtomicBool::new(false); pub fn init() -> Result<(), ()> { - if !WAKE_WORD_ENGINE.get().is_none() {return Ok(());} // already initialized + if !WAKE_WORD_ENGINE.get().is_none() { + return Ok(()); + } // already initialized // store current engine - WAKE_WORD_ENGINE.set(DB.get().unwrap().wake_word_engine).unwrap(); + WAKE_WORD_ENGINE + .set(DB.get().unwrap().wake_word_engine) + .unwrap(); // load given wake-word engine match WAKE_WORD_ENGINE.get().unwrap() { @@ -31,33 +35,27 @@ pub fn init() -> Result<(), ()> { info!("Initializing Porcupine wake-word engine."); return porcupine::init(); - }, + } WakeWordEngine::Rustpotter => { // Init Rustpotter wake-word engine info!("Initializing Rustpotter wake-word engine."); return rustpotter::init(); - }, + } WakeWordEngine::Vosk => { // Init Vosk as wake-word engine (very slow, though) info!("Initializing Vosk as wake-word engine."); warn!("Using Vosk as wake-word engine is highly not recommended, because it's very slow for this task."); return vosk::init(); - }, + } } } pub fn data_callback(frame_buffer: &[i16]) -> Option { match WAKE_WORD_ENGINE.get().unwrap() { - WakeWordEngine::Porcupine => { - porcupine::data_callback(frame_buffer) - }, - WakeWordEngine::Rustpotter => { - rustpotter::data_callback(frame_buffer) - }, - WakeWordEngine::Vosk => { - vosk::data_callback(frame_buffer) - } + WakeWordEngine::Porcupine => porcupine::data_callback(frame_buffer), + WakeWordEngine::Rustpotter => rustpotter::data_callback(frame_buffer), + WakeWordEngine::Vosk => vosk::data_callback(frame_buffer), } -} \ No newline at end of file +} diff --git a/app/src/listener/porcupine.rs b/app/src/listener/porcupine.rs index bfb4aa7..1ebb3f0 100644 --- a/app/src/listener/porcupine.rs +++ b/app/src/listener/porcupine.rs @@ -3,8 +3,8 @@ use std::path::Path; use once_cell::sync::OnceCell; use porcupine::{Porcupine, PorcupineBuilder}; -use crate::DB; use crate::config; +use crate::DB; // store porcupine instance static PORCUPINE: OnceCell = OnceCell::new(); @@ -16,26 +16,30 @@ pub fn init() -> Result<(), ()> { picovoice_api_key = DB.get().unwrap().api_keys.picovoice.clone(); if picovoice_api_key.trim().is_empty() { warn!("Picovoice API key is not set."); - return Err(()) + return Err(()); } // create porcupine instance with the given API key - match PorcupineBuilder::new_with_keyword_paths(picovoice_api_key, &[Path::new(config::KEYWORDS_PATH).join(config::DEFAULT_KEYWORD)]) - .sensitivities(&[config::DEFAULT_SENSITIVITY]) // set sensitivity - .init() { - Ok(pinstance) => { - // success - info!("Porcupine successfully initialized with the given API key."); + match PorcupineBuilder::new_with_keyword_paths( + picovoice_api_key, + &[Path::new(config::KEYWORDS_PATH).join(config::DEFAULT_KEYWORD)], + ) + .sensitivities(&[config::DEFAULT_SENSITIVITY]) // set sensitivity + .init() + { + Ok(pinstance) => { + // success + info!("Porcupine successfully initialized with the given API key."); - // store - PORCUPINE.set(pinstance); - }, - Err(msg) => { - error!("Porcupine failed to initialize, either API key is not valid or there is no internet connection."); - error!("Error details: {}", msg); + // store + PORCUPINE.set(pinstance); + } + Err(msg) => { + error!("Porcupine failed to initialize, either API key is not valid or there is no internet connection."); + error!("Error details: {}", msg); - return Err(()); - } + return Err(()); + } } Ok(()) @@ -44,9 +48,9 @@ pub fn init() -> Result<(), ()> { pub fn data_callback(frame_buffer: &[i16]) -> Option { if let Ok(keyword_index) = PORCUPINE.get().unwrap().process(&frame_buffer) { if keyword_index >= 0 { - return Some(keyword_index) + return Some(keyword_index); } } None -} \ No newline at end of file +} diff --git a/app/src/listener/rustpotter.rs b/app/src/listener/rustpotter.rs index 75b73c9..768ec75 100644 --- a/app/src/listener/rustpotter.rs +++ b/app/src/listener/rustpotter.rs @@ -2,10 +2,13 @@ use std::path::Path; use std::sync::Mutex; use once_cell::sync::OnceCell; -use rustpotter::{Rustpotter, RustpotterConfig, WavFmt, DetectorConfig, FiltersConfig, ScoreMode, GainNormalizationConfig, BandPassConfig}; +use rustpotter::{ + AudioFmt, BandPassConfig, DetectorConfig, FiltersConfig, GainNormalizationConfig, Rustpotter, + RustpotterConfig, ScoreMode, +}; -use crate::DB; use crate::config; +use crate::DB; // store rustpotter instance static RUSTPOTTER: OnceCell> = OnceCell::new(); @@ -19,23 +22,23 @@ pub fn init() -> Result<(), ()> { // success // wake word files list // @TODO. Make it configurable via GUI for custom user voice. - let rustpotter_wake_word_files: [&str; 5] = [ + let rustpotter_wake_word_files: [&str; 1] = [ "rustpotter/jarvis-default.rpw", - "rustpotter/jarvis-community-1.rpw", - "rustpotter/jarvis-community-2.rpw", - "rustpotter/jarvis-community-3.rpw", - "rustpotter/jarvis-community-4.rpw", + // "rustpotter/jarvis-community-1.rpw", + // "rustpotter/jarvis-community-2.rpw", + // "rustpotter/jarvis-community-3.rpw", + // "rustpotter/jarvis-community-4.rpw", // "rustpotter/jarvis-community-5.rpw", ]; // load wake word files for rpw in rustpotter_wake_word_files { - rinstance.add_wakeword_from_file(rpw).unwrap(); + rinstance.add_wakeword_from_file(rpw, rpw).unwrap(); // @TODO: Change wakeword key to something else? } // store RUSTPOTTER.set(Mutex::new(rinstance)); - }, + } Err(msg) => { error!("Rustpotter failed to initialize.\nError details: {}", msg); @@ -49,17 +52,17 @@ pub fn init() -> Result<(), ()> { pub fn data_callback(frame_buffer: &[i16]) -> Option { let mut lock = RUSTPOTTER.get().unwrap().lock(); let rustpotter = lock.as_mut().unwrap(); - let detection = rustpotter.process_i16(&frame_buffer); + let detection = rustpotter.process_samples(frame_buffer.to_vec()); // @TODO. Temp crutch. Fix optimization issue, frame_buffer should not be copied to a new vector! if let Some(detection) = detection { if detection.score > config::RUSPOTTER_MIN_SCORE { info!("Rustpotter detection info:\n{:?}", detection); - return Some(0) + return Some(0); } else { info!("Rustpotter detection info:\n{:?}", detection) } } None -} \ No newline at end of file +} diff --git a/app/src/listener/vosk.rs b/app/src/listener/vosk.rs index 4d4f5df..b9bdcdf 100644 --- a/app/src/listener/vosk.rs +++ b/app/src/listener/vosk.rs @@ -17,17 +17,20 @@ pub fn data_callback(frame_buffer: &[i16]) -> Option { let recognized_phrase_chars = phrase.trim().to_lowercase().chars().collect::>(); // compare - let compare_ratio = seqdiff::ratio(&config::VOSK_FETCH_PHRASE.chars().collect::>(), &recognized_phrase_chars); + let compare_ratio = seqdiff::ratio( + &config::VOSK_FETCH_PHRASE.chars().collect::>(), + &recognized_phrase_chars, + ); info!("og phrase: {:?}", &config::VOSK_FETCH_PHRASE); info!("recognized phrase: {:?}", &recognized_phrase_chars); info!("compare ratio: {}", compare_ratio); if compare_ratio >= config::VOSK_MIN_RATIO { info!("Phrase activated."); - return Some(0) + return Some(0); } } } None -} \ No newline at end of file +} diff --git a/app/src/log.rs b/app/src/log.rs index 3f5bf11..6f38abd 100644 --- a/app/src/log.rs +++ b/app/src/log.rs @@ -6,7 +6,11 @@ use crate::APP_LOG_DIR; pub fn init_logging() -> Result<(), String> { // configure logging let config = LogConfigBuilder::builder() - .path(format!("{}/{}", APP_LOG_DIR.get().unwrap().display(), config::LOG_FILE_NAME)) + .path(format!( + "{}/{}", + APP_LOG_DIR.get().unwrap().display(), + config::LOG_FILE_NAME + )) .size(1 * 100) .roll_count(10) .time_format("%Y-%m-%d %H:%M:%S.%f") //E.g:%H:%M:%S.%f @@ -18,4 +22,4 @@ pub fn init_logging() -> Result<(), String> { simple_log::new(config)?; Ok(()) -} \ No newline at end of file +} diff --git a/app/src/main.rs b/app/src/main.rs index 3408f39..a885401 100644 --- a/app/src/main.rs +++ b/app/src/main.rs @@ -3,7 +3,7 @@ use std::error::Error; use std::path::PathBuf; use once_cell::sync::{Lazy, OnceCell}; -use platform_dirs::{AppDirs}; +use platform_dirs::AppDirs; // expose the config mod config; @@ -35,8 +35,8 @@ mod stt; // include commands mod commands; -use commands::AssistantCommand; use crate::commands::list; +use commands::AssistantCommand; // include audio mod audio; @@ -45,8 +45,8 @@ mod audio; mod listener; // some global data -static APP_DIR: Lazy = Lazy::new(|| {env::current_dir().unwrap()}); -static SOUND_DIR: Lazy = Lazy::new(|| {APP_DIR.clone().join("sound")}); +static APP_DIR: Lazy = Lazy::new(|| env::current_dir().unwrap()); +static SOUND_DIR: Lazy = Lazy::new(|| APP_DIR.clone().join("sound")); static APP_DIRS: OnceCell = OnceCell::new(); static APP_CONFIG_DIR: OnceCell = OnceCell::new(); static APP_LOG_DIR: OnceCell = OnceCell::new(); @@ -62,7 +62,10 @@ fn main() -> Result<(), String> { // log some base info info!("Starting Jarvis v{} ...", config::APP_VERSION.unwrap()); - info!("Config directory is: {}", APP_CONFIG_DIR.get().unwrap().display()); + info!( + "Config directory is: {}", + APP_CONFIG_DIR.get().unwrap().display() + ); info!("Log directory is: {}", APP_LOG_DIR.get().unwrap().display()); // initialize database (settings) @@ -93,7 +96,11 @@ fn main() -> Result<(), String> { // init commands info!("Initializing commands."); let commands = commands::parse_commands().unwrap(); - info!("Commands initialized.\nOverall commands parsed: {}\nParsed commands: {:?}", commands.len(), commands::list(&commands)); + info!( + "Commands initialized.\nOverall commands parsed: {}\nParsed commands: {:?}", + commands.len(), + commands::list(&commands) + ); COMMANDS_LIST.set(commands).unwrap(); // init audio @@ -111,4 +118,4 @@ fn main() -> Result<(), String> { app::start(); Ok(()) -} \ No newline at end of file +} diff --git a/app/src/recorder.rs b/app/src/recorder.rs index b857f7c..30ba788 100644 --- a/app/src/recorder.rs +++ b/app/src/recorder.rs @@ -4,7 +4,7 @@ mod pvrecorder; use once_cell::sync::OnceCell; -use crate::{DB, config, config::structs::RecorderType}; +use crate::{config, config::structs::RecorderType, DB}; static RECORDER_TYPE: OnceCell = OnceCell::new(); static FRAME_LENGTH: OnceCell = OnceCell::new(); @@ -14,23 +14,35 @@ pub fn init() -> Result<(), ()> { // @TODO. Make it configurable? RECORDER_TYPE.set(config::DEFAULT_RECORDER_TYPE).unwrap(); + // some info + info!("Loading recorder ..."); + info!("Available audio_devices are:\n{:?}", get_audio_devices()); + // load given recorder match RECORDER_TYPE.get().unwrap() { RecorderType::PvRecorder => { // Init Pv Recorder info!("Initializing PvRecorder recording backend."); FRAME_LENGTH.set(512u32).unwrap(); // pvrecorder requires frame buffer of 512 - match pvrecorder::init_microphone(get_selected_microphone_index(), FRAME_LENGTH.get().unwrap().to_owned()) { + let selected_microphone = get_selected_microphone_index(); + match pvrecorder::init_microphone( + selected_microphone, + FRAME_LENGTH.get().unwrap().to_owned(), + ) { false => { error!("Recorder initialization failed."); - return Err(()) - }, + return Err(()); + } _ => { - info!("Recorder initialization success."); + info!( + "Recorder initialization success. Listening to microphone ({}): {}", + selected_microphone, + get_audio_device_name(selected_microphone) + ); } } - }, + } RecorderType::PortAudio => { // Init PortAudio info!("Initializing PortAudio recording backend"); @@ -42,7 +54,7 @@ pub fn init() -> Result<(), ()> { // }, // _ => () // } - }, + } RecorderType::Cpal => { // Init CPAL info!("Initializing CPAL recording backend"); @@ -64,11 +76,11 @@ pub fn read_microphone(frame_buffer: &mut [i16]) { match RECORDER_TYPE.get().unwrap() { RecorderType::PvRecorder => { pvrecorder::read_microphone(frame_buffer); - }, + } RecorderType::PortAudio => { todo!(); // portaudio::read_microphone(frame_buffer); - }, + } RecorderType::Cpal => { // cpal::read_microphone(frame_buffer); panic!("Cpal should be used via callback assignment"); @@ -79,12 +91,15 @@ pub fn read_microphone(frame_buffer: &mut [i16]) { pub fn start_recording() -> Result<(), ()> { match RECORDER_TYPE.get().unwrap() { RecorderType::PvRecorder => { - return pvrecorder::start_recording(get_selected_microphone_index(), FRAME_LENGTH.get().unwrap().to_owned()); - }, + return pvrecorder::start_recording( + get_selected_microphone_index(), + FRAME_LENGTH.get().unwrap().to_owned(), + ); + } RecorderType::PortAudio => { todo!(); // portaudio::start_recording(get_selected_microphone_index(), FRAME_LENGTH.load(Ordering::SeqCst)); - }, + } RecorderType::Cpal => { todo!(); // cpal::start_recording(get_selected_microphone_index(), FRAME_LENGTH.load(Ordering::SeqCst)); @@ -94,13 +109,11 @@ pub fn start_recording() -> Result<(), ()> { pub fn stop_recording() -> Result<(), ()> { match RECORDER_TYPE.get().unwrap() { - RecorderType::PvRecorder => { - pvrecorder::stop_recording() - }, + RecorderType::PvRecorder => pvrecorder::stop_recording(), RecorderType::PortAudio => { todo!(); // portaudio::stop_recording(); - }, + } RecorderType::Cpal => { todo!(); // cpal::stop_recording(); @@ -110,4 +123,28 @@ pub fn stop_recording() -> Result<(), ()> { pub fn get_selected_microphone_index() -> i32 { DB.get().unwrap().microphone -} \ No newline at end of file +} + +pub fn get_audio_devices() -> Vec { + match RECORDER_TYPE.get().unwrap() { + RecorderType::PvRecorder => pvrecorder::list_audio_devices(), + RecorderType::PortAudio => { + todo!(); + } + RecorderType::Cpal => { + todo!(); + } + } +} + +pub fn get_audio_device_name(idx: i32) -> String { + match RECORDER_TYPE.get().unwrap() { + RecorderType::PvRecorder => pvrecorder::get_audio_device_name(idx), + RecorderType::PortAudio => { + todo!(); + } + RecorderType::Cpal => { + todo!(); + } + } +} diff --git a/app/src/recorder/pvrecorder.rs b/app/src/recorder/pvrecorder.rs index e1711c9..bffbf50 100644 --- a/app/src/recorder/pvrecorder.rs +++ b/app/src/recorder/pvrecorder.rs @@ -1,16 +1,16 @@ use once_cell::sync::OnceCell; +use pv_recorder::{PvRecorder, PvRecorderBuilder}; use std::sync::atomic::{AtomicBool, Ordering}; -use pv_recorder::{Recorder, RecorderBuilder}; -static RECORDER: OnceCell = OnceCell::new(); +static RECORDER: OnceCell = OnceCell::new(); static IS_RECORDING: AtomicBool = AtomicBool::new(false); pub fn init_microphone(device_index: i32, frame_length: u32) -> bool { match RECORDER.get().is_none() { true => { - let pv_recorder = RecorderBuilder::new() + let pv_recorder = PvRecorderBuilder::new(frame_length as i32) .device_index(device_index) - .frame_length(frame_length as i32) + // .frame_length(frame_length as i32) .init(); match pv_recorder { @@ -20,7 +20,7 @@ pub fn init_microphone(device_index: i32, frame_length: u32) -> bool { // success true - }, + } Err(msg) => { error!("Failed to initialize pvrecorder.\nError details: {:?}", msg); @@ -28,8 +28,8 @@ pub fn init_microphone(device_index: i32, frame_length: u32) -> bool { false } } - }, - _ => true // already initialized + } + _ => true, // already initialized } } @@ -37,12 +37,17 @@ pub fn read_microphone(frame_buffer: &mut [i16]) { // ensure microphone is initialized if !RECORDER.get().is_none() { // read to frame buffer - match RECORDER.get().unwrap().read(frame_buffer) { + + let frame = RECORDER.get().unwrap().read(); + + match frame { + Ok(f) => { + frame_buffer.copy_from_slice(f.as_slice()); + } Err(msg) => { // @TODO: Fix? PvRecorder always wait for PCM buffer size of 512. error!("Failed to read audio frame. {:?}", msg); - }, - _ => () + } } } } @@ -61,7 +66,7 @@ pub fn start_recording(device_index: i32, frame_length: u32) -> Result<(), ()> { // success Ok(()) - }, + } Err(msg) => { error!("Failed to start audio recording!"); @@ -83,16 +88,42 @@ pub fn stop_recording() -> Result<(), ()> { IS_RECORDING.store(false, Ordering::SeqCst); // success - return Ok(()) - }, + return Ok(()); + } Err(msg) => { error!("Failed to stop audio recording!"); // fail - return Err(()) + return Err(()); } } } Ok(()) // if already stopped or not yet initialized -} \ No newline at end of file +} + +pub fn list_audio_devices() -> Vec { + let audio_devices = PvRecorderBuilder::default().get_available_devices(); + match audio_devices { + Ok(audio_devices) => audio_devices, + Err(err) => panic!("Failed to get audio devices: {}", err), + } +} + +pub fn get_audio_device_name(idx: i32) -> String { + let audio_devices = list_audio_devices(); + let mut first_device: String = String::new(); + + for (_idx, device) in audio_devices.iter().enumerate() { + if idx as usize == _idx { + return device.to_string(); + } + + if _idx == 0 { + first_device = device.to_string() + } + } + + // return first device as default, if none were matched + first_device +} diff --git a/app/src/stt.rs b/app/src/stt.rs index 3d24f28..288c402 100644 --- a/app/src/stt.rs +++ b/app/src/stt.rs @@ -1,14 +1,16 @@ mod vosk; -use once_cell::sync::OnceCell; use crate::config; +use once_cell::sync::OnceCell; use crate::config::structs::SpeechToTextEngine; static STT_TYPE: OnceCell = OnceCell::new(); pub fn init() -> Result<(), ()> { - if !STT_TYPE.get().is_none() {return Ok(());} // already initialized + if !STT_TYPE.get().is_none() { + return Ok(()); + } // already initialized // set default stt type // @TODO. Make it configurable? @@ -29,8 +31,6 @@ pub fn init() -> Result<(), ()> { pub fn recognize(data: &[i16], partial: bool) -> Option { match STT_TYPE.get().unwrap() { - SpeechToTextEngine::Vosk => { - vosk::recognize(data, partial) - } + SpeechToTextEngine::Vosk => vosk::recognize(data, partial), } -} \ No newline at end of file +} diff --git a/app/src/stt/vosk.rs b/app/src/stt/vosk.rs index 8704555..cf82fba 100644 --- a/app/src/stt/vosk.rs +++ b/app/src/stt/vosk.rs @@ -9,7 +9,9 @@ static MODEL: OnceCell = OnceCell::new(); static RECOGNIZER: OnceCell> = OnceCell::new(); pub fn init_vosk() { - if !RECOGNIZER.get().is_none() {return;} // already initialized + if !RECOGNIZER.get().is_none() { + return; + } // already initialized let model = Model::new(VOSK_MODEL_PATH).unwrap(); let mut recognizer = Recognizer::new(&model, 16000.0).unwrap(); @@ -23,12 +25,26 @@ pub fn init_vosk() { } pub fn recognize(data: &[i16], include_partial: bool) -> Option { - let state = RECOGNIZER.get().unwrap().lock().unwrap().accept_waveform(data); + let state = RECOGNIZER + .get() + .unwrap() + .lock() + .unwrap() + .accept_waveform(data); match state { DecodingState::Running => { if include_partial { - Some(RECOGNIZER.get().unwrap().lock().unwrap().partial_result().partial.into()) + Some( + RECOGNIZER + .get() + .unwrap() + .lock() + .unwrap() + .partial_result() + .partial + .into(), + ) } else { None } @@ -36,7 +52,11 @@ pub fn recognize(data: &[i16], include_partial: bool) -> Option { DecodingState::Finalized => { // Result will always be multiple because we called set_max_alternatives Some( - RECOGNIZER.get().unwrap().lock().unwrap() + RECOGNIZER + .get() + .unwrap() + .lock() + .unwrap() .result() .multiple() .unwrap() diff --git a/app/src/tray.rs b/app/src/tray.rs index 87c3fc1..71da32f 100644 --- a/app/src/tray.rs +++ b/app/src/tray.rs @@ -1,11 +1,11 @@ mod menu; +use image; use tray_icon::{ menu::{AboutMetadata, Menu, MenuEvent, MenuItem, PredefinedMenuItem}, - TrayEvent, TrayIconBuilder, + TrayIconBuilder, TrayIconEvent, }; use winit::event_loop::{ControlFlow, EventLoopBuilder}; -use image; use winit::platform::windows::EventLoopBuilderExtWindows; use crate::config; @@ -15,7 +15,6 @@ pub fn init() { // New thread will prevent tray icon to work on MacOS // @TODO: MacOS support. std::thread::spawn(|| { - // load tray icon let icon_path = format!("{}/icons/{}", env!("CARGO_MANIFEST_DIR"), config::TRAY_ICON); let icon = load_icon(std::path::Path::new(&icon_path)); @@ -24,8 +23,9 @@ pub fn init() { let tray_menu = Menu::with_items(&[ &MenuItem::new("Перезапуск", true, None), &MenuItem::new("Настройки", true, None), - &MenuItem::new("Выход", true, None) - ]); + &MenuItem::new("Выход", true, None), + ]) + .unwrap(); #[cfg(not(target_os = "linux"))] let mut tray_icon = Some( @@ -34,7 +34,7 @@ pub fn init() { .with_tooltip(config::TRAY_TOOLTIP) .with_icon(icon) .build() - .unwrap() + .unwrap(), ); // Since winit doesn't use gtk on Linux, and we need gtk for @@ -55,33 +55,37 @@ pub fn init() { } // run the event loop - let event_loop = EventLoopBuilder::new().with_any_thread(true).build(); + let event_loop = EventLoopBuilder::new() + .with_any_thread(true) + .build() + .unwrap(); let menu_channel = MenuEvent::receiver(); - let tray_channel = TrayEvent::receiver(); + let tray_channel = TrayIconEvent::receiver(); - event_loop.run(move |_event, _, control_flow| { - *control_flow = ControlFlow::Poll; + event_loop + .run(move |_event, event_loop| { + event_loop.set_control_flow(ControlFlow::Poll); - //if let Ok(event) = tray_channel.try_recv() { - // println!("tray event: {event:?}"); - //} + //if let Ok(event) = tray_channel.try_recv() { + // println!("tray event: {event:?}"); + //} - if let Ok(event) = menu_channel.try_recv() { - println!("menu event: {:?}", event); + if let Ok(event) = menu_channel.try_recv() { + println!("menu event: {:?}", event); - if event.id == 1002 { - std::process::exit(0); + if event.id == "1002" { + std::process::exit(0); + } } - } - }); - + }) + .expect("Tray event loop run error"); }); info!("Tray initialized."); } -fn load_icon(path: &std::path::Path) -> tray_icon::icon::Icon { +fn load_icon(path: &std::path::Path) -> tray_icon::Icon { let (icon_rgba, icon_width, icon_height) = { let image = image::open(path) .expect("Failed to open icon path") @@ -90,6 +94,5 @@ fn load_icon(path: &std::path::Path) -> tray_icon::icon::Icon { let rgba = image.into_raw(); (rgba, width, height) }; - tray_icon::icon::Icon::from_rgba(icon_rgba, icon_width, icon_height) - .expect("Failed to open icon") -} \ No newline at end of file + tray_icon::Icon::from_rgba(icon_rgba, icon_width, icon_height).expect("Failed to open icon") +} diff --git a/app/src/tray/menu.rs b/app/src/tray/menu.rs index b72c224..6708325 100644 --- a/app/src/tray/menu.rs +++ b/app/src/tray/menu.rs @@ -1,7 +1,7 @@ pub enum TrayMenuItem { Restart, Settings, - Exit + Exit, } impl TrayMenuItem { @@ -9,7 +9,7 @@ impl TrayMenuItem { match *self { TrayMenuItem::Restart => "Перезапустить", TrayMenuItem::Settings => "Настройки", - TrayMenuItem::Exit => "Выход" + TrayMenuItem::Exit => "Выход", } } -} \ No newline at end of file +}