From a1928edb6660660568f82ba19b7f13e8042de691 Mon Sep 17 00:00:00 2001 From: shadow cat Date: Sat, 6 Dec 2025 20:48:19 -0500 Subject: [PATCH] update iris --- Cargo.lock | 563 ++++++++++++++++++++++--------------- Cargo.toml | 2 + iris | 2 +- src/bin/client/account.rs | 22 ++ src/bin/client/debug.rs | 5 +- src/bin/client/main.rs | 45 ++- src/bin/client/ui/login.rs | 82 ++---- src/bin/client/ui/main.rs | 16 +- src/bin/client/ui/misc.rs | 36 +++ src/bin/client/ui/mod.rs | 2 + 10 files changed, 467 insertions(+), 308 deletions(-) create mode 100644 src/bin/client/account.rs diff --git a/Cargo.lock b/Cargo.lock index 6513635..c7f5635 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,6 +37,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "aligned" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923" +dependencies = [ + "as-slice", +] + [[package]] name = "aligned-vec" version = "0.6.4" @@ -194,6 +203,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -215,6 +233,26 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "av-scenechange" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" +dependencies = [ + "aligned", + "anyhow", + "arg_enum_proc_macro", + "arrayvec", + "log", + "num-rational", + "num-traits", + "pastey", + "rayon", + "thiserror 2.0.17", + "v_frame", + "y4m", +] + [[package]] name = "av1-grain" version = "0.2.5" @@ -224,7 +262,7 @@ dependencies = [ "anyhow", "arrayvec", "log", - "nom 8.0.0", + "nom", "num-rational", "v_frame", ] @@ -308,9 +346,12 @@ dependencies = [ [[package]] name = "bitstream-io" -version = "2.6.0" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" +dependencies = [ + "core2", +] [[package]] name = "block" @@ -327,6 +368,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96eb4cdd6cf1b31d671e9efe75c5d1ec614776856cefbe109ca373554a6d514f" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block2" version = "0.5.1" @@ -338,9 +388,9 @@ dependencies = [ [[package]] name = "built" -version = "0.7.7" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" +checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" @@ -382,9 +432,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "calloop" @@ -414,9 +464,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.45" +version = "1.2.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" +checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" dependencies = [ "find-msvc-tools", "jobserver", @@ -430,16 +480,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" -[[package]] -name = "cfg-expr" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" -dependencies = [ - "smallvec", - "target-lexicon", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -452,13 +492,24 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.10.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cbf41c6ec3c4b9eaf7f8f5c11a72cd7d3aa0428125c20d5ef4d09907a0f019" +dependencies = [ + "cfg-if", + "cpufeatures", + "rand_core 0.10.0-rc-2", +] + [[package]] name = "cipher" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", ] @@ -614,6 +665,15 @@ dependencies = [ "libc", ] +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + [[package]] name = "core_maths" version = "0.1.1" @@ -706,12 +766,48 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "919bd05924682a5480aec713596b9e2aabed3a0a6022fab6847f85a99e5f190a" +dependencies = [ + "hybrid-array", +] + [[package]] name = "cursor-icon" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" +[[package]] +name = "curve25519-dalek" +version = "5.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d8cfa313d59919eda35b420bd37db85bf58d6754d6f128b9949932b0c0fcce7" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.11.0-rc.4", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "deranged" version = "0.5.5" @@ -727,11 +823,21 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea390c940e465846d64775e55e3115d5dc934acb953de6f6e6360bc232fe2bf7" +dependencies = [ + "block-buffer 0.11.0", + "crypto-common 0.2.0-rc.5", +] + [[package]] name = "directories-next" version = "2.0.0" @@ -799,6 +905,29 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +[[package]] +name = "ed25519" +version = "3.0.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "594435fe09e345ee388e4e8422072ff7dfeca8729389fbd997b3f5504c44cd47" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "3.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbef01b6e6a5f913ae480bb34ddd798ce6d358054bebf77177200ec84af61ad5" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.10.0-rc-2", + "sha2 0.11.0-rc.3", + "subtle", + "zeroize", +] + [[package]] name = "either" version = "1.15.0" @@ -910,22 +1039,28 @@ dependencies = [ ] [[package]] -name = "find-msvc-tools" -version = "0.1.4" +name = "fiat-crypto" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + +[[package]] +name = "find-msvc-tools" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" [[package]] name = "fixedbitset" -version = "0.4.2" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "a2152dbcb980c05735e2a651d96011320a949eb31a0c8b38b72645ce97dec676" dependencies = [ "crc32fast", "miniz_oxide", @@ -1070,9 +1205,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.13.3" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" +checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" dependencies = [ "color_quant", "weezl", @@ -1197,9 +1332,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "foldhash 0.2.0", ] @@ -1228,14 +1363,23 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", +] + +[[package]] +name = "hybrid-array" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f471e0a81b2f90ffc0cb2f951ae04da57de8baa46fa99112b062a5173a5088d0" +dependencies = [ + "typenum", ] [[package]] name = "image" -version = "0.25.8" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" +checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", @@ -1251,8 +1395,8 @@ dependencies = [ "rayon", "rgb", "tiff", - "zune-core", - "zune-jpeg", + "zune-core 0.5.0", + "zune-jpeg 0.5.5", ] [[package]] @@ -1273,12 +1417,12 @@ checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", ] [[package]] @@ -1333,9 +1477,9 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" -version = "0.12.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] @@ -1374,9 +1518,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -1407,9 +1551,9 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libfuzzer-sys" @@ -1483,9 +1627,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "loop9" @@ -1551,12 +1695,6 @@ dependencies = [ "paste", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -1569,9 +1707,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -1580,9 +1718,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" +checksum = "80986bbbcf925ebd3be54c26613d861255284584501595cf418320c078945608" dependencies = [ "num-traits", "pxfm", @@ -1601,7 +1739,7 @@ dependencies = [ "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "hexf-parse", "indexmap", "libm", @@ -1650,16 +1788,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nom" version = "8.0.0" @@ -2059,9 +2187,11 @@ dependencies = [ "bincode", "clap", "directories-next", + "ed25519-dalek", "iris", "pollster", "quinn", + "rand 0.10.0-rc.5", "rcgen", "ron", "scrypt", @@ -2175,13 +2305,19 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pastey" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" + [[package]] name = "pbkdf2" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest", + "digest 0.10.7", "hmac", ] @@ -2203,11 +2339,12 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" -version = "0.6.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", + "hashbrown 0.15.5", "indexmap", ] @@ -2318,7 +2455,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.7", + "toml_edit", ] [[package]] @@ -2351,9 +2488,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.25" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" dependencies = [ "num-traits", ] @@ -2454,35 +2591,25 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha 0.9.0", + "rand_chacha", "rand_core 0.9.3", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "rand" +version = "0.10.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "be866deebbade98028b705499827ad6967c8bb1e21f96a2609913c8c076e9307" dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", + "chacha20", + "getrandom 0.3.4", + "rand_core 0.10.0-rc-2", ] [[package]] @@ -2513,6 +2640,12 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.0-rc-2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "104a23e4e8b77312a823b6b5613edbac78397e2f34320bc7ac4277013ec4478e" + [[package]] name = "range-alloc" version = "0.1.4" @@ -2521,19 +2654,21 @@ checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" [[package]] name = "rangemap" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" +checksum = "acbbbbea733ec66275512d0b9694f34102e7d5406fdbe2ad8d21b28dce92887c" [[package]] name = "rav1e" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" dependencies = [ + "aligned-vec", "arbitrary", "arg_enum_proc_macro", "arrayvec", + "av-scenechange", "av1-grain", "bitstream-io", "built", @@ -2548,23 +2683,21 @@ dependencies = [ "noop_proc_macro", "num-derive", "num-traits", - "once_cell", "paste", "profiling", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand 0.9.2", + "rand_chacha", "simd_helpers", - "system-deps", - "thiserror 1.0.69", + "thiserror 2.0.17", "v_frame", "wasm-bindgen", ] [[package]] name = "ravif" -version = "0.11.20" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" +checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" dependencies = [ "avif-serialize", "imgref", @@ -2721,6 +2854,15 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.38.44" @@ -2775,9 +2917,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" +checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" dependencies = [ "web-time", "zeroize", @@ -2875,7 +3017,7 @@ dependencies = [ "password-hash", "pbkdf2", "salsa20", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -2920,6 +3062,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + [[package]] name = "serde" version = "1.0.228" @@ -2950,15 +3098,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - [[package]] name = "sha2" version = "0.10.9" @@ -2967,7 +3106,18 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d43dc0354d88b791216bb5c1bfbb60c0814460cc653ae0ebd71f286d0bd927" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.11.0-rc.4", ] [[package]] @@ -2978,13 +3128,19 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "3.0.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0251c9d6468f4ba853b6352b190fb7c1e405087779917c238445eb03993826" + [[package]] name = "simd-adler32" version = "0.3.7" @@ -3040,9 +3196,9 @@ dependencies = [ [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "version_check", ] @@ -3106,6 +3262,12 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "static_assertions" version = "1.1.0" @@ -3143,9 +3305,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -3161,25 +3323,6 @@ dependencies = [ "libc", ] -[[package]] -name = "system-deps" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - [[package]] name = "tempfile" version = "3.23.0" @@ -3253,7 +3396,7 @@ dependencies = [ "half", "quick-error", "weezl", - "zune-jpeg", + "zune-jpeg 0.4.21", ] [[package]] @@ -3343,27 +3486,6 @@ dependencies = [ "syn", ] -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - [[package]] name = "toml_datetime" version = "0.7.3" @@ -3375,25 +3497,12 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.27" +version = "0.23.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" dependencies = [ "indexmap", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.23.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" -dependencies = [ - "indexmap", - "toml_datetime 0.7.3", + "toml_datetime", "toml_parser", "winnow", ] @@ -3409,9 +3518,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" dependencies = [ "log", "pin-project-lite", @@ -3421,9 +3530,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -3432,22 +3541,21 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" dependencies = [ "once_cell", ] [[package]] name = "tree_magic_mini" -version = "3.2.0" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f943391d896cdfe8eec03a04d7110332d445be7df856db382dd96a730667562c" +checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" dependencies = [ "memchr", - "nom 7.1.3", - "once_cell", + "nom", "petgraph", ] @@ -3492,9 +3600,9 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-script" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" +checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" @@ -3537,12 +3645,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "version-compare" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" - [[package]] name = "version_check" version = "0.9.5" @@ -3582,9 +3684,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -3595,9 +3697,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -3608,9 +3710,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3618,9 +3720,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", @@ -3631,9 +3733,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] @@ -3749,9 +3851,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -3793,7 +3895,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "js-sys", "log", "naga", @@ -3824,7 +3926,7 @@ dependencies = [ "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "indexmap", "log", "naga", @@ -3891,7 +3993,7 @@ dependencies = [ "gpu-alloc", "gpu-allocator", "gpu-descriptor", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "js-sys", "khronos-egl", "libc", @@ -4319,9 +4421,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -4414,6 +4516,12 @@ version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +[[package]] +name = "y4m" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" + [[package]] name = "yasna" version = "0.5.2" @@ -4437,18 +4545,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", @@ -4495,6 +4603,12 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" +[[package]] +name = "zune-core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111f7d9820f05fd715df3144e254d6fc02ee4088b0644c0ffd0efc9e6d9d2773" + [[package]] name = "zune-inflate" version = "0.2.54" @@ -4510,5 +4624,14 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ - "zune-core", + "zune-core 0.4.12", +] + +[[package]] +name = "zune-jpeg" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6fb7703e32e9a07fb3f757360338b3a567a5054f21b5f52a666752e333d58e" +dependencies = [ + "zune-core 0.5.0", ] diff --git a/Cargo.toml b/Cargo.toml index 5393a35..a4e775d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,8 @@ ron = "0.12.0" sled = "0.34.7" clap = { version = "4.5.53", features = ["derive"] } scrypt = "0.11.0" +ed25519-dalek = { version = "3.0.0-pre.2", features = ["rand_core"] } +rand = { version = "0.10.0-rc.5", features = ["chacha"] } [[bin]] name = "openworm-client" diff --git a/iris b/iris index f6b1143..62aa028 160000 --- a/iris +++ b/iris @@ -1 +1 @@ -Subproject commit f6b1143665962f3860ece9381610f23cc489ee62 +Subproject commit 62aa02847a5d159e6545d81fa6478ea572aff1ed diff --git a/src/bin/client/account.rs b/src/bin/client/account.rs new file mode 100644 index 0000000..fe5c4ba --- /dev/null +++ b/src/bin/client/account.rs @@ -0,0 +1,22 @@ +use ed25519_dalek::SigningKey; +use rand::{ + SeedableRng, + rngs::{OsRng, StdRng}, +}; + +pub struct Account { + device_key: SigningKey, + account_key: SigningKey, +} + +impl Account { + pub fn new() -> Account { + let mut csprng = StdRng::try_from_rng(&mut OsRng).unwrap(); + let device_key = SigningKey::generate(&mut csprng); + let account_key = SigningKey::generate(&mut csprng); + Account { + device_key, + account_key, + } + } +} diff --git a/src/bin/client/debug.rs b/src/bin/client/debug.rs index fefb2bd..0e1852a 100644 --- a/src/bin/client/debug.rs +++ b/src/bin/client/debug.rs @@ -1,7 +1,8 @@ use crate::Client; +use iris::{prelude::*, winit::UiState}; -pub fn debug(client: &mut Client) { - client.ui.debug_layers(); +pub fn debug(_client: &mut Client, ui: &mut Ui, _state: &UiState) { + ui.debug_layers(); // let mut file = std::fs::OpenOptions::new() // .write(true) // .create(true) diff --git a/src/bin/client/main.rs b/src/bin/client/main.rs index bf3fbab..2194b0f 100644 --- a/src/bin/client/main.rs +++ b/src/bin/client/main.rs @@ -16,6 +16,7 @@ use winit::{ window::WindowAttributes, }; +mod account; mod debug; mod net; mod rsc; @@ -24,7 +25,7 @@ mod ui; fn main() { install_crypto_provider(); - UiApp::::run(); + DefaultApp::::run(); } pub struct Client { @@ -33,7 +34,6 @@ pub struct Client { state: ClientState, main_ui: WidgetId, notif: WidgetId, - ui: DefaultUi, proxy: Proxy, } @@ -43,27 +43,23 @@ pub enum ClientEvent { Err(String), } -impl DefaultUiState for Client { +impl DefaultAppState for Client { type Event = ClientEvent; - fn ui(&mut self) -> &mut DefaultUi { - &mut self.ui - } - fn window_attrs() -> WindowAttributes { WindowAttributes::default().with_title("OPENWORM") } - fn new(mut ui: DefaultUi, proxy: Proxy) -> Self { + fn new(ui: &mut Ui, state: &UiState, proxy: Proxy) -> Self { let dir = DataDir::default(); - let notif = WidgetPtr::default().add(&mut ui); - let main_ui = WidgetPtr::default().add(&mut ui); + let notif = WidgetPtr::default().add(ui); + let main_ui = WidgetPtr::default().add(ui); ( notif.clone().pad(Padding::top(10)).align(Align::TOP_CENTER), main_ui.clone(), ) .stack() - .set_root(&mut ui); + .set_root(ui); let mut s = Self { data: dir.load(CLIENT_DATA), @@ -71,14 +67,13 @@ impl DefaultUiState for Client { dir, main_ui: main_ui.clone(), notif, - ui, proxy, }; - connect_screen(&mut s).set_ptr(&s.main_ui, &mut s.ui); + connect_screen(&mut s, ui, state).set_ptr(&s.main_ui, ui); s } - fn event(&mut self, event: ClientEvent) { + fn event(&mut self, event: ClientEvent, ui: &mut Ui, _state: &UiState) { match event { ClientEvent::Connect { send } => { let ClientState::Connect(connect) = self.state.take() else { @@ -91,15 +86,15 @@ impl DefaultUiState for Client { thread: th, }, }); - login_screen(self).set_ptr(&self.main_ui, &mut self.ui); + login_screen(self, ui).set_ptr(&self.main_ui, ui); } ClientEvent::ServerMsg(msg) => match msg { ServerMsg::SendMsg(msg) => { if let ClientState::LoggedIn(state) = &mut self.state && let Some(msg_area) = &state.channel { - let msg = msg_widget(&msg.user, &msg.content).add(&mut self.ui); - self.ui[msg_area].children.push(msg.any()); + let msg = msg_widget(&msg.user, &msg.content).add(ui); + ui[msg_area].children.push(msg.any()); } } ServerMsg::LoadMsgs(msgs) => { @@ -108,8 +103,8 @@ impl DefaultUiState for Client { { for msg in msgs { state.msgs.push(msg.clone()); - let msg = msg_widget(&msg.user, &msg.content).add(&mut self.ui); - self.ui[msg_area].children.push(msg.any()); + let msg = msg_widget(&msg.user, &msg.content).add(ui); + ui[msg_area].children.push(msg.any()); } } } @@ -124,32 +119,32 @@ impl DefaultUiState for Client { msgs: Vec::new(), username, }); - main_view(self).set_ptr(&self.main_ui, &mut self.ui); + main_view(self, ui).set_ptr(&self.main_ui, ui); } ServerMsg::Error(error) => { let msg = format!("{error:?}"); - self.ui[&self.notif].inner = Some(werror(&mut self.ui, &msg)); + ui[&self.notif].inner = Some(werror(ui, &msg)); } }, ClientEvent::Err(msg) => { - self.ui[&self.notif].inner = Some(werror(&mut self.ui, &msg)); + ui[&self.notif].inner = Some(werror(ui, &msg)); } } } - fn exit(&mut self) { + fn exit(&mut self, _ui: &mut Ui, _state: &UiState) { self.state.exit(); self.dir.save(CLIENT_DATA, &self.data); } - fn window_event(&mut self, event: WindowEvent) { + fn window_event(&mut self, event: WindowEvent, ui: &mut Ui, state: &UiState) { if let WindowEvent::MouseInput { state: ElementState::Pressed, button: MouseButton::Middle, .. } = event { - debug::debug(self); + debug::debug(self, ui, state); } } } diff --git a/src/bin/client/ui/login.rs b/src/bin/client/ui/login.rs index 6c39e07..d04b774 100644 --- a/src/bin/client/ui/login.rs +++ b/src/bin/client/ui/login.rs @@ -1,56 +1,34 @@ -use iris::winit::{attr::Selector, event::Edited}; +use iris::winit::{UiState, event::Edited}; use openworm::net::ClientMsg; use crate::{net::AppHandle, state::ClientState}; use super::*; -pub fn field_widget(name: &str, hint_text: &str, ui: &mut Ui) -> WidgetId { - wtext(name) - .editable(true) - .size(20) - .hint(hint(hint_text)) - .add(ui) -} +// pub fn start_screen(client: &mut Client) -> WidgetId { +// (wtext("Select Account").text_align(Align::CENTER).size(30),) +// .span(Dir::DOWN) +// .gap(10) +// .pad(15) +// .width(400) +// .align(Align::CENTER) +// .add(&mut client.ui) +// .any() +// } -pub fn field_box(field: WidgetId, ui: &mut Ui) -> WidgetId { - field - .clone() - .pad(10) - .background(rect(Color::BLACK.brighter(0.1)).radius(15)) - .attr::(field) - .add(ui) - .any() -} - -pub fn submit_button(text: &str, on_submit: impl Fn(&mut Client) + 'static) -> impl WidgetRet { - let color = Color::GREEN; - rect(color) - .radius(15) - .id_on(CursorSense::click(), move |id, client: &mut Client, _| { - client.ui[id].color = color.darker(0.3); - on_submit(client); - }) - .height(40) - .foreground(wtext(text).size(20).text_align(Align::CENTER)) - .to_any() -} - -pub fn connect_screen(client: &mut Client) -> WidgetId { - let Client { - data, ui, proxy, .. - } = client; +pub fn connect_screen(client: &mut Client, ui: &mut Ui, state: &UiState) -> WidgetId { + let Client { data, proxy, .. } = client; let ip = field_widget(&data.ip, "ip", ui); let ip_ = ip.clone(); let handle = AppHandle { proxy: proxy.clone(), - window: ui.window.clone(), + window: state.window.clone(), }; - let submit = submit_button("connect", move |client| { + let submit = submit_button("connect", move |client, ui| { let ClientState::Connect(state) = &mut client.state else { return; }; - let ip = client.ui[&ip_].content(); + let ip = ui[&ip_].content(); state.handle = Some(connect(handle.clone(), ConnectInfo { ip })); }); ( @@ -59,8 +37,8 @@ pub fn connect_screen(client: &mut Client) -> WidgetId { .size(30), field_box( // NOTE: should probably do this on submit - ip.id_on(Edited, |id, client: &mut Client, _| { - client.data.ip = client.ui[id].content(); + ip.on(Edited, |ctx| { + ctx.state.data.ip = ctx.ui[ctx.id].content(); }) .add(ui), ui, @@ -77,28 +55,28 @@ pub fn connect_screen(client: &mut Client) -> WidgetId { .any() } -pub fn login_screen(client: &mut Client) -> WidgetId { - let Client { data, ui, .. } = client; +pub fn login_screen(client: &mut Client, ui: &mut Ui) -> WidgetId { + let Client { data, .. } = client; let username = field_widget(&data.username, "username", ui); let password = field_widget(&data.password, "password", ui); let username_ = username.clone(); let password_ = password.clone(); - let submit = submit_button("login", move |client| { + let submit = submit_button("login", move |client, ui| { let ClientState::Login(state) = &mut client.state else { return; }; - let username = client.ui[&username_].content(); - let password = client.ui[&password_].content(); + let username = ui[&username_].content(); + let password = ui[&password_].content(); state.handle.send(ClientMsg::Login { username, password }); }); let username_ = username.clone(); let password_ = password.clone(); - let create_button = submit_button("create account", move |client| { + let create_button = submit_button("create account", move |client, ui| { let ClientState::Login(state) = &mut client.state else { return; }; - let username = client.ui[&username_].content(); - let password = client.ui[&password_].content(); + let username = ui[&username_].content(); + let password = ui[&password_].content(); state .handle .send(ClientMsg::CreateAccount { username, password }); @@ -107,16 +85,16 @@ pub fn login_screen(client: &mut Client) -> WidgetId { wtext("login to server").text_align(Align::CENTER).size(30), field_box( username - .id_on(Edited, |id, client: &mut Client, _| { - client.data.username = client.ui[id].content(); + .on(Edited, |ctx| { + ctx.state.data.username = ctx.ui[ctx.id].content(); }) .add(ui), ui, ), field_box( password - .id_on(Edited, |id, client: &mut Client, _| { - client.data.password = client.ui[id].content(); + .on(Edited, |ctx| { + ctx.state.data.password = ctx.ui[ctx.id].content(); }) .add(ui), ui, diff --git a/src/bin/client/ui/main.rs b/src/bin/client/ui/main.rs index 292e76d..4074c2e 100644 --- a/src/bin/client/ui/main.rs +++ b/src/bin/client/ui/main.rs @@ -11,11 +11,11 @@ use openworm::net::{ClientMsg, NetClientMsg}; pub const SIZE: u32 = 20; -pub fn main_view(client: &mut Client) -> WidgetId { +pub fn main_view(client: &mut Client, ui: &mut Ui) -> WidgetId { let ClientState::LoggedIn(state) = &mut client.state else { panic!("we ain't logged in buh"); }; - let msg_panel = msg_panel(&mut client.ui, state); + let msg_panel = msg_panel(ui, state); let side_bar = rect(Color::BLACK.brighter(0.05)).width(80); let bg = ( @@ -26,7 +26,7 @@ pub fn main_view(client: &mut Client) -> WidgetId { (side_bar, msg_panel) .span(Dir::RIGHT) .background(bg) - .add(&mut client.ui) + .add(ui) .any() } @@ -71,17 +71,17 @@ pub fn msg_panel(ui: &mut Ui, state: &mut LoggedIn) -> impl WidgetRet + use<> { .height(rest(1)), send_text .clone() - .id_on(Submit, move |id, client: &mut Client, _| { - let ClientState::LoggedIn(state) = &mut client.state else { + .on(Submit, move |ctx| { + let ClientState::LoggedIn(state) = &mut ctx.state.state else { panic!("we ain't logged in buh"); }; - let content = client.ui.text(id).take(); + let content = ctx.ui.text(ctx.id).take(); let msg = NetClientMsg { content: content.clone(), }; state.network.send(ClientMsg::SendMsg(msg.clone())); - let msg = msg_widget(&state.username, &content).add(&mut client.ui); - client.ui[&msg_area].children.push(msg.any()); + let msg = msg_widget(&state.username, &content).add(ctx.ui); + ctx.ui[&msg_area].children.push(msg.any()); }) .pad(15) .attr::(send_text) diff --git a/src/bin/client/ui/misc.rs b/src/bin/client/ui/misc.rs index bfbc8d5..1c3facb 100644 --- a/src/bin/client/ui/misc.rs +++ b/src/bin/client/ui/misc.rs @@ -1,3 +1,5 @@ +use iris::winit::attr::Selector; + use super::*; pub fn werror(ui: &mut Ui, msg: &str) -> WidgetId { @@ -12,3 +14,37 @@ pub fn werror(ui: &mut Ui, msg: &str) -> WidgetId { pub fn hint(msg: impl Into) -> TextBuilder { wtext(msg).size(20).color(Color::GRAY) } + +pub fn field_widget(name: &str, hint_text: &str, ui: &mut Ui) -> WidgetId { + wtext(name) + .editable(true) + .size(20) + .hint(hint(hint_text)) + .add(ui) +} + +pub fn field_box(field: WidgetId, ui: &mut Ui) -> WidgetId { + field + .clone() + .pad(10) + .background(rect(Color::BLACK.brighter(0.1)).radius(15)) + .attr::(field) + .add(ui) + .any() +} + +pub fn submit_button( + text: &str, + on_submit: impl Fn(&mut Client, &mut Ui) + 'static, +) -> impl WidgetRet { + let color = Color::GREEN; + rect(color) + .radius(15) + .on(CursorSense::click(), move |ctx| { + ctx.ui[ctx.id].color = color.darker(0.3); + on_submit(ctx.state, ctx.ui); + }) + .height(40) + .foreground(wtext(text).size(20).text_align(Align::CENTER)) + .to_any() +} diff --git a/src/bin/client/ui/mod.rs b/src/bin/client/ui/mod.rs index 7d6e13f..6188c36 100644 --- a/src/bin/client/ui/mod.rs +++ b/src/bin/client/ui/mod.rs @@ -10,3 +10,5 @@ mod misc; pub use login::*; pub use main::*; pub use misc::*; + +event_ctx!(Client);