diff options
author | 2025-06-01 14:09:43 +0100 | |
---|---|---|
committer | 2025-06-01 14:09:43 +0100 | |
commit | 0841bc1c64926de1d1a658ea1498f22e43ac6994 (patch) | |
tree | 4f1624a9eaac389528383ae139cc7679e8178f0b | |
parent | 39e6a0da29bd7129c572d56590bdb7acd6a580b9 (diff) | |
download | macaw-web-0841bc1c64926de1d1a658ea1498f22e43ac6994.tar.gz macaw-web-0841bc1c64926de1d1a658ea1498f22e43ac6994.tar.bz2 macaw-web-0841bc1c64926de1d1a658ea1498f22e43ac6994.zip |
fix: update JID types
-rw-r--r-- | Cargo.lock | 157 | ||||
-rw-r--r-- | src/lib.rs | 109 |
2 files changed, 123 insertions, 143 deletions
@@ -170,9 +170,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "av1-grain" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" dependencies = [ "anyhow", "arrayvec", @@ -226,9 +226,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitstream-io" @@ -283,9 +283,9 @@ checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" [[package]] name = "cc" -version = "1.2.22" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ "jobserver", "libc", @@ -664,9 +664,9 @@ checksum = "a1731451909bde27714eacba19c2566362a7f35224f52b153d3f42cf60f72472" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", "windows-sys 0.59.0", @@ -722,9 +722,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fancy_constructor" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac0fd7f4636276b4bd7b3148d0ba2c1c3fbede2b5214e47e7fedb70b02cde44" +checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" dependencies = [ "macroific", "proc-macro2", @@ -1055,9 +1055,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hex" @@ -1181,9 +1181,9 @@ checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", @@ -1197,9 +1197,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" @@ -1302,9 +1302,9 @@ dependencies = [ [[package]] name = "indexed_db_futures" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc9c8bc34f6d3486832b25d036b9a3dfea8d214e9ae1cf25c2a150963a5b8dd" +checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" dependencies = [ "accessory", "cfg-if", @@ -1649,9 +1649,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -1685,26 +1685,17 @@ dependencies = [ name = "luz" version = "0.1.0" dependencies = [ - "async-recursion", - "async-trait", - "futures", "getrandom 0.2.16", "jid", "js-sys", - "lazy_static", "peanuts", - "pin-project", - "pin-project-lite", "rsasl", "stanza", - "take_mut", "thiserror 2.0.12", "tokio", "tokio-native-tls", - "tokio_with_wasm", "tracing", "trust-dns-resolver", - "try_map", "uuid", "wasm-bindgen", "wasm-bindgen-futures", @@ -1845,13 +1836,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1951,9 +1942,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ "hermit-abi", "libc", @@ -1986,11 +1977,11 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg-if", "foreign-types", "libc", @@ -2018,9 +2009,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.108" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -2042,9 +2033,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -2052,9 +2043,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -2087,7 +2078,7 @@ dependencies = [ [[package]] name = "peanuts" version = "0.1.0" -source = "git+https://bunny.garden/peanuts#94afe363ea88a6fd036d1681542d650e7cd3c2e7" +source = "git+https://bunny.garden/peanuts#e1f4fbb65724fdfbce2068d3ee334eb4f60af37a" dependencies = [ "async-recursion", "circular", @@ -2180,9 +2171,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" dependencies = [ "proc-macro2", "syn 2.0.101", @@ -2472,7 +2463,7 @@ version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -2506,9 +2497,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "resolv-conf" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7c8f7f733062b66dc1c63f9db168ac0b97a9210e247fa90fdc9ad08f51b302" +checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" [[package]] name = "rgb" @@ -2554,7 +2545,7 @@ name = "rusqlite" version = "0.34.0" source = "git+https://github.com/Spxg/rusqlite.git?branch=wasm-demo#4820de79e45d0604e0596641cbb5dd86aa53f0ed" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "chrono", "fallible-iterator", "fallible-streaming-iterator", @@ -2592,7 +2583,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys", @@ -2601,9 +2592,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" @@ -2652,7 +2643,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "core-foundation", "core-foundation-sys", "libc", @@ -2889,9 +2880,9 @@ checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2899,9 +2890,9 @@ dependencies = [ [[package]] name = "sqlite-wasm-rs" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20e0d972353ff053376a9c5f5804d2d9a12839831e3487de8947b29df2fe04c" +checksum = "c0c6fdb636283dad1283b20bc62157ac68a7124fde269723467689c4fd6d356c" dependencies = [ "fragile", "indexed_db_futures", @@ -3043,9 +3034,9 @@ dependencies = [ [[package]] name = "tachys" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1d6bcb12a286928f53c269412d3e515d37583cb90d8daf4bc1b35d65104883" +checksum = "51a9a5d6436e532fd27b49bcca005a038bf510fc369687de830121a74811ccf4" dependencies = [ "any_spawner", "async-trait", @@ -3077,12 +3068,6 @@ dependencies = [ ] [[package]] -name = "take_mut" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" - -[[package]] name = "target-lexicon" version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3090,9 +3075,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.19.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", "getrandom 0.3.3", @@ -3198,9 +3183,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", @@ -3247,9 +3232,9 @@ dependencies = [ [[package]] name = "tokio_with_wasm_proc" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee80eb7e23abaa636caa9afe6042c6d8a8c0686165b8165f4fbf2988f0dd347f" +checksum = "499ed9d797c376545920fa64c39c3efb34217ba4db826102db6c3912555291c9" dependencies = [ "quote", "syn 2.0.101", @@ -3395,12 +3380,6 @@ dependencies = [ ] [[package]] -name = "try_map" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1626d07cb5c1bb2cf17d94c0be4852e8a7c02b041acec9a8c5bdda99f9d580" - -[[package]] name = "typed-builder" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3490,9 +3469,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -3649,9 +3628,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "widestring" @@ -3670,9 +3649,9 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", @@ -3711,18 +3690,18 @@ checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -3909,7 +3888,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -18,7 +18,7 @@ use filamento::{ }; use futures::stream::StreamExt; use indexmap::IndexMap; -use jid::JID; +use jid::{JID, BareJID}; use leptos::{ ev::{Event, KeyboardEvent, MouseEvent, SubmitEvent}, html::{self, Div, Input, Pre, Textarea}, @@ -47,7 +47,7 @@ pub enum AppState { pub struct Client { client: filamento::Client<Files>, resource: ArcRwSignal<Option<String>>, - jid: Arc<JID>, + jid: Arc<BareJID>, file_store: Files, } @@ -229,7 +229,7 @@ fn LoginPage( let client = Client { client, resource: resource.clone(), - jid: Arc::new(jid), + jid: Arc::new(jid.to_bare()), file_store: files, }; @@ -311,8 +311,8 @@ fn LoginPage( } pub struct MessageSubscriptions { - all: HashMap<Uuid, mpsc::Sender<(JID, MacawMessage)>>, - subset: HashMap<JID, HashMap<Uuid, mpsc::Sender<MacawMessage>>>, + all: HashMap<Uuid, mpsc::Sender<(BareJID, MacawMessage)>>, + subset: HashMap<BareJID, HashMap<Uuid, mpsc::Sender<MacawMessage>>>, } impl MessageSubscriptions { @@ -323,7 +323,7 @@ impl MessageSubscriptions { } } - pub async fn broadcast(&mut self, to: JID, message: MacawMessage) { + pub async fn broadcast(&mut self, to: BareJID, message: MacawMessage) { // subscriptions to all let mut removals = Vec::new(); for (id, sender) in &self.all { @@ -358,14 +358,14 @@ impl MessageSubscriptions { } } - pub fn subscribe_all(&mut self) -> (Uuid, Receiver<(JID, MacawMessage)>) { + pub fn subscribe_all(&mut self) -> (Uuid, Receiver<(BareJID, MacawMessage)>) { let (send, recv) = mpsc::channel(10); let id = Uuid::new_v4(); self.all.insert(id, send); (id, recv) } - pub fn subscribe_chat(&mut self, chat: JID) -> (Uuid, Receiver<MacawMessage>) { + pub fn subscribe_chat(&mut self, chat: BareJID) -> (Uuid, Receiver<MacawMessage>) { let (send, recv) = mpsc::channel(10); let id = Uuid::new_v4(); if let Some(chat_subscribers) = self.subset.get_mut(&chat) { @@ -381,7 +381,7 @@ impl MessageSubscriptions { self.all.remove(&sub_id); } - pub fn unsubscribe_chat(&mut self, sub_id: Uuid, chat: JID) { + pub fn unsubscribe_chat(&mut self, sub_id: Uuid, chat: BareJID) { if let Some(chat_subs) = self.subset.get_mut(&chat) { chat_subs.remove(&sub_id); } @@ -390,8 +390,8 @@ impl MessageSubscriptions { #[derive(Store, Clone)] pub struct Roster { - #[store(key: JID = |(jid, _)| jid.clone())] - contacts: HashMap<JID, MacawContact>, + #[store(key: BareJID = |(jid, _)| jid.clone())] + contacts: HashMap<BareJID, MacawContact>, } impl Roster { @@ -410,9 +410,9 @@ impl Roster { #[derive(Store, Default)] pub struct OpenChatsPanel { // jid must be a chat in the chats map - chat_view: Option<JID>, - #[store(key: JID = |(jid, _)| jid.clone())] - chats: IndexMap<JID, MacawChat>, + chat_view: Option<BareJID>, + #[store(key: BareJID = |(jid, _)| jid.clone())] + chats: IndexMap<BareJID, MacawChat>, } pub fn open_chat(open_chats: Store<OpenChatsPanel>, chat: MacawChat) { @@ -487,8 +487,8 @@ impl OpenChatsPanel { #[derive(Store)] pub struct UserPresences { - #[store(key: JID = |(jid, _)| jid.clone())] - user_presences: HashMap<JID, ArcRwSignal<Presences>>, + #[store(key: BareJID = |(jid, _)| jid.clone())] + user_presences: HashMap<BareJID, ArcRwSignal<Presences>>, } impl UserPresences { @@ -499,7 +499,7 @@ impl UserPresences { } // TODO: should be a bare jid - pub fn get_user_presences(&mut self, user: &JID) -> ArcRwSignal<Presences> { + pub fn get_user_presences(&mut self, user: &BareJID) -> ArcRwSignal<Presences> { if let Some(presences) = self.user_presences.get(user) { presences.clone() } else { @@ -628,9 +628,9 @@ fn Macaw( let messages_store: StateStore<Uuid, ArcStore<Message>> = StateStore::new(); provide_context(messages_store); - let chats_store: StateStore<JID, ArcStore<Chat>> = StateStore::new(); + let chats_store: StateStore<BareJID, ArcStore<Chat>> = StateStore::new(); provide_context(chats_store); - let users_store: StateStore<JID, ArcStore<User>> = StateStore::new(); + let users_store: StateStore<BareJID, ArcStore<User>> = StateStore::new(); provide_context(users_store); let open_chats = Store::new(OpenChatsPanel::default()); @@ -651,7 +651,7 @@ fn Macaw( provide_context(client_user); // TODO: timestamp incoming/outgoing subscription requests - let (subscription_requests, set_subscription_requests)= signal(HashSet::<JID>::new()); + let (subscription_requests, set_subscription_requests)= signal(HashSet::<BareJID>::new()); provide_context(subscription_requests); provide_context(set_subscription_requests); @@ -693,15 +693,15 @@ fn Macaw( }); } UpdateMessage::Presence { from, presence } => { - let bare_jid = from.as_bare(); + let bare_jid = from.to_bare(); if let Some(presences) = user_presences.read().user_presences.get(&bare_jid) { - if let Some(resource) = from.resourcepart { - presences.write().update_presence(resource, presence); + if let Some(resource) = from.resourcepart() { + presences.write().update_presence(resource.clone(), presence); } } else { - if let Some(resource) = from.resourcepart { + if let Some(resource) = from.resourcepart() { let mut presences = Presences::new(); - presences.update_presence(resource, presence); + presences.update_presence(resource.clone(), presence); user_presences.write().user_presences.insert(bare_jid, ArcRwSignal::new(presences)); } } @@ -779,7 +779,7 @@ pub fn toggle_open(state: &mut Option<SidebarOpen>, open: SidebarOpen) -> bool { #[component] pub fn Sidebar() -> impl IntoView { - let requests: ReadSignal<HashSet<JID>> = use_context().expect("no pending subscriptions in context"); + let requests: ReadSignal<HashSet<BareJID>> = use_context().expect("no pending subscriptions in context"); // for what has been clicked open (in the background) let (open, set_open) = signal(None::<SidebarOpen>); @@ -932,7 +932,7 @@ pub fn PersonalStatusMenu(user: Store<User>, set_open: WriteSignal<bool>) -> imp let client = use_context::<Client>().expect("client not in context"); let client1 = client.clone(); let (show_value, set_show_value) = signal({ - let show = match user_presences.write().get_user_presences(&user.jid().read().as_bare()).write().resource_presence(client.resource.read().clone().unwrap_or_default()).presence { + let show = match user_presences.write().get_user_presences(&user.jid().read()).write().resource_presence(client.resource.read().clone().unwrap_or_default()).presence { PresenceType::Online(online) => match online.show { Some(s) => match s { Show::Away => 3, @@ -1371,7 +1371,7 @@ pub fn MessageHistoryBuffer(chat: MacawChat) -> impl IntoView { let each = move || { let mut last_timestamp = NaiveDateTime::MIN; - let mut last_user: Option<JID> = None; + let mut last_user: Option<BareJID> = None; let mut messages = messages .get() .into_iter() @@ -1613,7 +1613,7 @@ pub fn Message(message: MacawMessage, major: bool, r#final: bool) -> impl IntoVi } #[component] -pub fn ChatViewMessageComposer(chat: JID) -> impl IntoView { +pub fn ChatViewMessageComposer(chat: BareJID) -> impl IntoView { let message_input: NodeRef<Div> = NodeRef::new(); // TODO: load last message draft @@ -1938,15 +1938,15 @@ impl<K: Eq + std::hash::Hash + Send + Sync + 'static, V: Send + Sync + 'static> #[derive(Clone)] struct MacawChat { - chat: StateListener<JID, ArcStore<Chat>>, - user: StateListener<JID, ArcStore<User>>, + chat: StateListener<BareJID, ArcStore<Chat>>, + user: StateListener<BareJID, ArcStore<User>>, } impl MacawChat { fn got_chat_and_user(chat: Chat, user: User) -> Self { - let chat_state_store: StateStore<JID, ArcStore<Chat>> = + let chat_state_store: StateStore<BareJID, ArcStore<Chat>> = use_context().expect("no chat state store"); - let user_state_store: StateStore<JID, ArcStore<User>> = + let user_state_store: StateStore<BareJID, ArcStore<User>> = use_context().expect("no user state store"); let user = user_state_store.store(user.jid.clone(), ArcStore::new(user)); let chat = chat_state_store.store(chat.correspondent.clone(), ArcStore::new(chat)); @@ -1955,7 +1955,7 @@ impl MacawChat { } impl Deref for MacawChat { - type Target = StateListener<JID, ArcStore<Chat>>; + type Target = StateListener<BareJID, ArcStore<Chat>>; fn deref(&self) -> &Self::Target { &self.chat @@ -1971,14 +1971,14 @@ impl DerefMut for MacawChat { #[derive(Clone)] struct MacawMessage { message: StateListener<Uuid, ArcStore<Message>>, - user: StateListener<JID, ArcStore<User>>, + user: StateListener<BareJID, ArcStore<User>>, } impl MacawMessage { fn got_message_and_user(message: Message, user: User) -> Self { let message_state_store: StateStore<Uuid, ArcStore<Message>> = use_context().expect("no message state store"); - let user_state_store: StateStore<JID, ArcStore<User>> = + let user_state_store: StateStore<BareJID, ArcStore<User>> = use_context().expect("no user state store"); let message = message_state_store.store(message.id, ArcStore::new(message)); let user = user_state_store.store(user.jid.clone(), ArcStore::new(user)); @@ -2002,13 +2002,13 @@ impl DerefMut for MacawMessage { #[derive(Clone)] struct MacawUser { - user: StateListener<JID, ArcStore<User>>, + user: StateListener<BareJID, ArcStore<User>>, } impl MacawUser { fn got_user(user: User) -> Self { - let user_state_store: StateStore<JID, ArcStore<User>> = + let user_state_store: StateStore<BareJID, ArcStore<User>> = use_context().expect("no user state store"); let user = user_state_store.store(user.jid.clone(), ArcStore::new(user)); Self { user } @@ -2016,7 +2016,7 @@ impl MacawUser { } impl Deref for MacawUser { - type Target = StateListener<JID, ArcStore<User>>; + type Target = StateListener<BareJID, ArcStore<User>>; fn deref(&self) -> &Self::Target { &self.user @@ -2032,13 +2032,13 @@ impl DerefMut for MacawUser { #[derive(Clone)] struct MacawContact { contact: Store<Contact>, - user: StateListener<JID, ArcStore<User>>, + user: StateListener<BareJID, ArcStore<User>>, } impl MacawContact { fn got_contact_and_user(contact: Contact, user: User) -> Self { let contact = Store::new(contact); - let user_state_store: StateStore<JID, ArcStore<User>> = + let user_state_store: StateStore<BareJID, ArcStore<User>> = use_context().expect("no user state store"); let user = user_state_store.store(user.jid.clone(), ArcStore::new(user)); Self { contact, user } @@ -2082,7 +2082,7 @@ fn ChatsList() -> impl IntoView { ), ) }) - .collect::<IndexMap<JID, _>>(); + .collect::<IndexMap<BareJID, _>>(); set_chats.set(chats); } Err(_) => { @@ -2189,9 +2189,9 @@ fn NewChatWidget(set_open_new_chat: WriteSignal<bool>) -> impl IntoView { use_context().expect("no open chats panel store in context"); let client = use_context::<Client>().expect("client not in context"); - let chat_state_store: StateStore<JID, ArcStore<Chat>> = + let chat_state_store: StateStore<BareJID, ArcStore<Chat>> = use_context().expect("no chat state store"); - let user_state_store: StateStore<JID, ArcStore<User>> = + let user_state_store: StateStore<BareJID, ArcStore<User>> = use_context().expect("no user state store"); let open_chat = Action::new_local(move |_| { @@ -2206,7 +2206,8 @@ fn NewChatWidget(set_open_new_chat: WriteSignal<bool>) -> impl IntoView { } let jid = match JID::from_str(&jid.read_untracked()) { - Ok(j) => j, + // TODO: ability to direct address a resource? + Ok(j) => j.to_bare(), Err(e) => { set_error.set(Some(e.into())); set_new_chat_pending.set(false); @@ -2214,7 +2215,7 @@ fn NewChatWidget(set_open_new_chat: WriteSignal<bool>) -> impl IntoView { } }; - let chat_jid = jid.as_bare(); + let chat_jid = jid; let (chat, user) = match client.get_chat_and_user(chat_jid).await { Ok(c) => c, Err(e) => { @@ -2270,7 +2271,7 @@ fn NewChatWidget(set_open_new_chat: WriteSignal<bool>) -> impl IntoView { #[component] fn RosterList() -> impl IntoView { - let requests: ReadSignal<HashSet<JID>> = use_context().expect("no pending subscriptions in context"); + let requests: ReadSignal<HashSet<BareJID>> = use_context().expect("no pending subscriptions in context"); let roster: Store<Roster> = use_context().expect("no roster in context"); let (open_add_contact, set_open_add_contact) = signal(false); @@ -2325,8 +2326,8 @@ pub enum AddContactError { #[component] fn AddContact() -> impl IntoView { - let requests: ReadSignal<HashSet<JID>> = use_context().expect("no pending subscriptions in context"); - let set_requests: WriteSignal<HashSet<JID>> = use_context().expect("no pending subscriptions write signal in context"); + let requests: ReadSignal<HashSet<BareJID>> = use_context().expect("no pending subscriptions in context"); + let set_requests: WriteSignal<HashSet<BareJID>> = use_context().expect("no pending subscriptions write signal in context"); let roster: Store<Roster> = use_context().expect("no roster in context"); let jid = RwSignal::new("".to_string()); @@ -2360,7 +2361,7 @@ fn AddContact() -> impl IntoView { } let jid = match JID::from_str(&jid.read_untracked()) { - Ok(j) => j, + Ok(j) => j.to_bare(), Err(e) => { set_error.set(Some(e.into())); set_add_contact_pending.set(false); @@ -2368,7 +2369,7 @@ fn AddContact() -> impl IntoView { } }; - let chat_jid = jid.as_bare(); + let chat_jid = jid; // TODO: more options? match client.buddy_request(chat_jid).await { Ok(c) => c, @@ -2408,7 +2409,7 @@ fn AddContact() -> impl IntoView { } }).collect::<Vec<_>>(); - let accept_friend_request = Action::new_local(move |jid: &JID| { + let accept_friend_request = Action::new_local(move |jid: &BareJID| { let client = client2.clone(); let jid = jid.clone(); async move { @@ -2417,7 +2418,7 @@ fn AddContact() -> impl IntoView { } }); - let reject_friend_request = Action::new_local(move |jid: &JID| { + let reject_friend_request = Action::new_local(move |jid: &BareJID| { let client = client3.clone(); let jid = jid.clone(); async move { @@ -2427,7 +2428,7 @@ fn AddContact() -> impl IntoView { } }); - let cancel_subscription_request = Action::new_local(move |jid: &JID| { + let cancel_subscription_request = Action::new_local(move |jid: &BareJID| { let client = client4.clone(); let jid = jid.clone(); async move { |