diff --git a/Cargo.lock b/Cargo.lock index 3841e64..8b77802 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aead" version = "0.4.3" @@ -14,9 +29,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", "cipher 0.4.4", @@ -63,9 +78,9 @@ checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8868f09ff8cea88b079da74ae569d9b8c62a23c68c746240b704ee6f7525c89c" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" dependencies = [ "serde", ] @@ -108,9 +123,9 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -119,9 +134,9 @@ version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -159,6 +174,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "backtrace" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.13.1" @@ -352,9 +382,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" dependencies = [ "libc", ] @@ -406,22 +436,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "crossterm" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" -dependencies = [ - "bitflags", - "crossterm_winapi", - "libc", - "mio", - "parking_lot 0.12.1", - "signal-hook", - "signal-hook-mio", - "winapi", -] - [[package]] name = "crossterm_winapi" version = "0.9.1" @@ -482,8 +496,8 @@ checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.60", - "quote 1.0.28", + "proc-macro2 1.0.63", + "quote 1.0.29", "strsim", "syn 1.0.109", ] @@ -495,7 +509,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", - "quote 1.0.28", + "quote 1.0.29", "syn 1.0.109", ] @@ -506,7 +520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.12.3", "lock_api", "once_cell", "parking_lot_core 0.9.8", @@ -537,8 +551,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" dependencies = [ "darling", - "proc-macro2 1.0.60", - "quote 1.0.28", + "proc-macro2 1.0.63", + "quote 1.0.29", "syn 1.0.109", ] @@ -584,9 +598,9 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -629,6 +643,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "equivalent" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" + [[package]] name = "errno" version = "0.3.1" @@ -771,9 +791,9 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -878,10 +898,16 @@ dependencies = [ ] [[package]] -name = "h2" -version = "0.3.19" +name = "gimli" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" + +[[package]] +name = "h2" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" dependencies = [ "bytes", "fnv", @@ -889,7 +915,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 1.9.3", "slab", "tokio", "tokio-util", @@ -905,6 +931,12 @@ dependencies = [ "ahash", ] +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + [[package]] name = "hermit-abi" version = "0.2.6" @@ -974,9 +1006,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -1046,10 +1078,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg 1.1.0", - "hashbrown", + "hashbrown 0.12.3", "serde", ] +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown 0.14.0", +] + [[package]] name = "inout" version = "0.1.3" @@ -1085,9 +1127,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.2" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "itertools" @@ -1139,9 +1181,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.146" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "linux-raw-sys" @@ -1171,7 +1213,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -1280,7 +1322,7 @@ dependencies = [ "ruma", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.7", "thiserror", "tokio", "tracing", @@ -1354,7 +1396,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.7", "thiserror", "zeroize", ] @@ -1380,6 +1422,15 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.8" @@ -1430,6 +1481,15 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.30.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -1444,9 +1504,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.54" +version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b3f656a17a6cbc115b5c7a40c616947d213ba182135b014d6051b73ab6f019" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ "bitflags", "cfg-if", @@ -1463,9 +1523,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -1476,9 +1536,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.88" +version = "0.9.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" dependencies = [ "cc", "libc", @@ -1560,7 +1620,7 @@ dependencies = [ "digest 0.10.7", "hmac", "password-hash", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] @@ -1584,9 +1644,9 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -1655,9 +1715,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.60" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" dependencies = [ "unicode-ident", ] @@ -1680,8 +1740,8 @@ checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools", - "proc-macro2 1.0.60", - "quote 1.0.28", + "proc-macro2 1.0.63", + "quote 1.0.29", "syn 1.0.109", ] @@ -1696,11 +1756,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.28" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" dependencies = [ - "proc-macro2 1.0.60", + "proc-macro2 1.0.63", ] [[package]] @@ -2003,7 +2063,7 @@ dependencies = [ "form_urlencoded", "getrandom 0.2.10", "http", - "indexmap", + "indexmap 1.9.3", "itoa", "js-sys", "js_int", @@ -2018,7 +2078,7 @@ dependencies = [ "thiserror", "tracing", "url", - "uuid 1.3.4", + "uuid 1.4.0", "wildmatch", ] @@ -2052,14 +2112,20 @@ checksum = "0f82e91eb61cd86d9287303133ee55b54618eccb75a522cc22a42c15f5bda340" dependencies = [ "once_cell", "proc-macro-crate", - "proc-macro2 1.0.60", - "quote 1.0.28", + "proc-macro2 1.0.63", + "quote 1.0.29", "ruma-identifiers-validation", "serde", "syn 1.0.109", "toml", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustix" version = "0.37.20" @@ -2142,16 +2208,16 @@ version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" dependencies = [ "itoa", "ryu", @@ -2185,9 +2251,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if", "cpufeatures", @@ -2318,19 +2384,19 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", + "proc-macro2 1.0.63", + "quote 1.0.29", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.18" +version = "2.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", + "proc-macro2 1.0.63", + "quote 1.0.29", "unicode-ident", ] @@ -2363,9 +2429,9 @@ version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -2395,11 +2461,12 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.2" +version = "1.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +checksum = "374442f06ee49c3a28a8fc9f01a2596fed7559c6b99b31279c3261778e77d84f" dependencies = [ "autocfg 1.1.0", + "backtrace", "bytes", "libc", "mio", @@ -2416,9 +2483,9 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -2456,17 +2523,17 @@ dependencies = [ [[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" [[package]] name = "toml_edit" -version = "0.19.10" +version = "0.19.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" +checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7" dependencies = [ - "indexmap", + "indexmap 2.0.0", "toml_datetime", "winnow", ] @@ -2491,13 +2558,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] [[package]] @@ -2540,12 +2607,13 @@ name = "trinitrix" version = "0.1.0" dependencies = [ "anyhow", - "crossterm 0.26.1", + "crossterm", "matrix-sdk", "serde", "tokio", "tracing-subscriber", "tui", + "tui-textarea", ] [[package]] @@ -2562,11 +2630,21 @@ checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" dependencies = [ "bitflags", "cassowary", - "crossterm 0.25.0", + "crossterm", "unicode-segmentation", "unicode-width", ] +[[package]] +name = "tui-textarea" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "437ad97a57d66f7231dab16f51ede1ff5a3aac68c83eb10fa3a178e454b63cae" +dependencies = [ + "crossterm", + "tui", +] + [[package]] name = "typenum" version = "1.16.0" @@ -2653,9 +2731,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.3.4" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa2982af2eec27de306107c027578ff7f423d65f7250e40ce0fea8f45248b81" +checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be" dependencies = [ "getrandom 0.2.10", "wasm-bindgen", @@ -2697,7 +2775,7 @@ dependencies = [ "rand 0.7.3", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.7", "subtle", "thiserror", "x25519-dalek", @@ -2706,11 +2784,10 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -2747,9 +2824,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", "wasm-bindgen-shared", ] @@ -2771,7 +2848,7 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ - "quote 1.0.28", + "quote 1.0.29", "wasm-bindgen-macro-support", ] @@ -2781,9 +2858,9 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2873,9 +2950,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" dependencies = [ "windows_aarch64_gnullvm 0.48.0", "windows_aarch64_msvc 0.48.0", @@ -3015,7 +3092,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.60", - "quote 1.0.28", - "syn 2.0.18", + "proc-macro2 1.0.63", + "quote 1.0.29", + "syn 2.0.22", ] diff --git a/Cargo.toml b/Cargo.toml index 6ee1b62..f2cb96a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,12 +2,14 @@ name = "trinitrix" version = "0.1.0" edition = "2021" +license = "MIT" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] tui = "0.19" -crossterm = "0.26" +tui-textarea = { version = "*" } +crossterm = "*" matrix-sdk = "0.6" anyhow = "1.0" tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] } diff --git a/src/accounts.rs b/src/accounts.rs index ef94741..de042c8 100644 --- a/src/accounts.rs +++ b/src/accounts.rs @@ -65,7 +65,7 @@ impl AccountsManager { } } - pub async fn add(&mut self, homeserver: &str, username: &str, password: &str) -> Result { + pub async fn add(&mut self, homeserver: &String, username: &String, password: &String) -> Result { let id = self.num_accounts; self.num_accounts += 1; @@ -174,4 +174,6 @@ impl AccountsManager { Some(c) => c, } } + + pub fn num_accounts(&self) -> u32 { self.num_accounts } } \ No newline at end of file diff --git a/src/app/mod.rs b/src/app/mod.rs index 39cec00..576ed76 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -16,8 +16,7 @@ pub struct Room { pub struct App { pub accounts_manager: accounts::AccountsManager, - pub client: Option, - + client: Option, current_room_id: u32, rooms: Vec, } diff --git a/src/main.rs b/src/main.rs index 88bec91..e1e8934 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ mod app; use matrix_sdk::ruma::exports::serde_json; use tokio::time::{sleep, Duration}; +use std::{io, thread}; use crate::app::Message; use crate::ui::UI; @@ -14,15 +15,12 @@ async fn main() -> anyhow::Result<()> { let mut app = app::App::new(); app.fill_test_data(); - let client = app.accounts_manager.add("https://nerdcult.net", "test", "abcd1234").await?; - let mut ui = UI::new(); - ui.draw_main(&app)?; + if app.accounts_manager.num_accounts() == 0 { + ui.setup(&mut app).await?; + } - - - // let client = app.accounts_manager.login(0).await?; - // app.client = Some(client); + ui.main(&mut app).await?; Ok(()) } diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 2762857..8ca1ad5 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -1,21 +1,29 @@ use crate::app::{App}; -use crossterm::event::KeyCode::Null; use crossterm::{ - event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode}, + event::{self, DisableMouseCapture, EnableMouseCapture, Event, read}, execute, terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, }; use anyhow::{Error, Result}; use std::io::Stdout; -use std::{io, thread, time::Duration}; +use std::io; use crossterm::style::style; use tui::{backend::CrosstermBackend, layout::{Constraint, Direction, Layout, Rect}, widgets::{Block, Borders, Widget}, Terminal, Frame}; use tui::layout::Alignment; use tui::style::{Color, Modifier, Style}; use tui::text::{Spans, Span, Text}; use tui::widgets::{Paragraph, Wrap}; +use tui_textarea::{Input, Key, TextArea}; +#[derive(Clone, Copy)] +enum SetupInputPosition { + Homeserver, + Username, + Password, + Ok +} + pub struct UI { terminal: Terminal>, } @@ -98,6 +106,29 @@ fn draw_main_room_info_block(frame: &mut Frame>, area: frame.render_widget(panel, area); } +fn textarea_activate(textarea: &mut TextArea) { + textarea.set_cursor_line_style(Style::default().add_modifier(Modifier::UNDERLINED)); + textarea.set_cursor_style(Style::default().add_modifier(Modifier::REVERSED)); + let b = textarea + .block() + .cloned() + .unwrap_or_else(|| Block::default().borders(Borders::ALL)); + textarea.set_block(b.style(Style::default())); +} + +fn textarea_inactivate(textarea: &mut TextArea) { + textarea.set_cursor_line_style(Style::default()); + textarea.set_cursor_style(Style::default()); + let b = textarea + .block() + .cloned() + .unwrap_or_else(|| Block::default().borders(Borders::ALL)); + textarea.set_block( + b.style(Style::default().fg(Color::DarkGray)) + ); +} + + impl UI { pub fn new() -> Self { let stdout = terminal_prepare().expect("failed to prepare terminal"); @@ -111,7 +142,7 @@ impl UI { } } - pub fn draw_main(&mut self, app: &App) -> Result<()> { + fn draw_main(&mut self, app: &App) -> Result<()> { let chunk = self.terminal.size()?; let main_chunks = Layout::default() @@ -143,7 +174,137 @@ impl UI { draw_main_room_info_block(frame, right_chunks[0]); })?; - thread::sleep(Duration::from_millis(10000)); + Ok(()) + } + + pub async fn main(&mut self, app: &mut App) -> Result<()> { + self.draw_main(app)?; + Ok(()) + } + + pub async fn setup(&mut self, app: &mut App) -> Result<()> { + let mut input_index = SetupInputPosition::Homeserver; + let mut strings: Vec = Vec::new(); + strings.resize(3, "".to_string()); + self.terminal.show_cursor()?; + + let content_ok_active = Span::styled("OK", Style::default().add_modifier(Modifier::UNDERLINED)); + let content_ok_inactive = Span::styled("OK", Style::default().fg(Color::DarkGray)); + + let block = Block::default() + .title("Login") + .borders(Borders::ALL); + + let mut homeserver = TextArea::default(); + let mut username = TextArea::default(); + let mut password = TextArea::default(); + + + homeserver.set_block( + Block::default() + .title("Homeserver") + .borders(Borders::ALL)); + username.set_block( + Block::default() + .title("Username") + .borders(Borders::ALL)); + password.set_block( + Block::default() + .title("Password") + .borders(Borders::ALL)); + + textarea_activate(&mut homeserver); + textarea_inactivate(&mut username); + textarea_inactivate(&mut password); + + + loop { + let mut ok = Paragraph::new(match input_index { + SetupInputPosition::Ok => content_ok_active.clone(), + _ => content_ok_inactive.clone(), + }) + .alignment(Alignment::Center); + + // define a 32 * 6 chunk in the middle of the screen + let mut chunk = self.terminal.size()?; + chunk.x = (chunk.width / 2) - 16; + chunk.y = (chunk.height / 2) - 5; + chunk.height = 12; + chunk.width = 32; + + let mut split_chunk = chunk.clone(); + split_chunk.x += 1; + split_chunk.y += 1; + split_chunk.height -= 1; + split_chunk.width -= 2; + + let chunks = Layout::default() + .direction(Direction::Vertical) + .constraints([ + Constraint::Length(3), // 0. Homserver: + Constraint::Length(3), // 1. Username: + Constraint::Length(3), // 2. Password: + Constraint::Length(1) // 3. OK + ].as_ref()) + .split(split_chunk); + + self.terminal.draw(|frame| { + + frame.render_widget(block.clone(), chunk); + frame.render_widget(homeserver.widget(), chunks[0]); + frame.render_widget(username.widget(), chunks[1]); + frame.render_widget(password.widget(), chunks[2]); + frame.render_widget(ok.clone(), chunks[3]); + })?; + + match Input::from(read()?.clone()) { + Input { key: Key::Esc, .. } => break, + Input { + key: Key::Enter, + .. + } => { + input_index = match input_index { + SetupInputPosition::Homeserver => { + textarea_inactivate(&mut homeserver); + textarea_activate(&mut username); + textarea_inactivate(&mut password); + SetupInputPosition::Username + }, + SetupInputPosition::Username => { + textarea_inactivate(&mut homeserver); + textarea_inactivate(&mut username); + textarea_activate(&mut password); + SetupInputPosition::Password + }, + SetupInputPosition::Password => { + textarea_inactivate(&mut homeserver); + textarea_inactivate(&mut username); + textarea_inactivate(&mut password); + SetupInputPosition::Ok + }, + SetupInputPosition::Ok => { + if app.accounts_manager.add(&homeserver.lines()[0], &username.lines()[0], &password.lines()[0]).await.is_ok() { + return Ok(()) + } + + textarea_activate(&mut homeserver); + textarea_inactivate(&mut username); + textarea_inactivate(&mut password); + SetupInputPosition::Homeserver + }, + } + } + input => { + let textarea = match input_index { + SetupInputPosition::Homeserver => &mut homeserver, + SetupInputPosition::Username => &mut username, + SetupInputPosition::Password => &mut password, + _ => continue, + }; + textarea.input(input); + } + }; + } Ok(()) }