From 47342294e8ae5379ee8d3a2c69b56f28c463415a Mon Sep 17 00:00:00 2001 From: MeexReay Date: Thu, 26 Jun 2025 16:27:02 +0300 Subject: [PATCH] feat: new ui prototype --- Cargo.lock | 878 ++++++++++++++++++++++++++++++++++++- Cargo.toml | 1 + src/chat/config.rs | 7 + src/chat/gui.rs | 169 ++++++- src/chat/images/avatar.png | Bin 0 -> 6025 bytes src/chat/styles/dark.css | 4 +- src/chat/styles/light.css | 4 +- src/chat/styles/style.css | 8 +- 8 files changed, 1030 insertions(+), 41 deletions(-) create mode 100644 src/chat/images/avatar.png diff --git a/Cargo.lock b/Cargo.lock index c4ec6a3..7d81769 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "aho-corasick" version = "1.1.3" @@ -62,7 +77,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -73,7 +88,7 @@ checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", "once_cell", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -136,7 +151,7 @@ dependencies = [ "rustix 1.0.7", "slab", "tracing", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -195,7 +210,7 @@ dependencies = [ "rustix 1.0.7", "signal-hook-registry", "slab", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -242,6 +257,7 @@ dependencies = [ "notify-rust", "rand", "regex", + "reqwest", "serde", "serde_default", "serde_yml", @@ -251,6 +267,27 @@ dependencies = [ "winresource", ] +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -546,6 +583,26 @@ dependencies = [ "objc2", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "endi" version = "1.1.0" @@ -586,7 +643,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -647,6 +704,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -703,6 +769,12 @@ dependencies = [ "syn", ] +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + [[package]] name = "futures-task" version = "0.3.31" @@ -817,6 +889,17 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.3.1" @@ -825,10 +908,16 @@ checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.13.3+wasi-0.2.2", "windows-targets", ] +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "gio" version = "0.20.9" @@ -869,7 +958,7 @@ dependencies = [ "gobject-sys 0.20.9", "libc", "system-deps", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -1069,6 +1158,25 @@ dependencies = [ "system-deps", ] +[[package]] +name = "h2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.15.2" @@ -1116,12 +1224,113 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + [[package]] name = "httparse" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + [[package]] name = "iana-time-zone" version = "0.1.63" @@ -1146,12 +1355,119 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "indexmap" version = "2.7.1" @@ -1162,6 +1478,22 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -1246,6 +1578,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + [[package]] name = "log" version = "0.4.25" @@ -1279,6 +1617,32 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + [[package]] name = "native-tls" version = "0.2.14" @@ -1389,6 +1753,15 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.20.3" @@ -1479,6 +1852,12 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -1520,7 +1899,16 @@ dependencies = [ "pin-project-lite", "rustix 1.0.7", "tracing", - "windows-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", ] [[package]] @@ -1600,7 +1988,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" dependencies = [ - "getrandom", + "getrandom 0.3.1", "zerocopy 0.8.17", ] @@ -1633,6 +2021,66 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "reqwest" +version = "0.12.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + [[package]] name = "rustc_version" version = "0.4.1" @@ -1652,7 +2100,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -1665,7 +2113,40 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.23.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -1686,7 +2167,7 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -1750,6 +2231,18 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + [[package]] name = "serde_repr" version = "0.1.20" @@ -1770,6 +2263,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_yml" version = "0.0.12" @@ -1826,6 +2331,16 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "socks" version = "0.3.4" @@ -1837,6 +2352,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1849,6 +2370,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "2.0.98" @@ -1860,6 +2387,47 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.0", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "system-deps" version = "7.0.3" @@ -1899,10 +2467,10 @@ checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.1", "once_cell", "rustix 0.38.44", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -1944,6 +2512,64 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.8.20" @@ -1978,6 +2604,51 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.41" @@ -2009,6 +2680,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "tungstenite" version = "0.27.0" @@ -2049,12 +2726,35 @@ version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "utf-8" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2079,6 +2779,21 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + [[package]] name = "wasi" version = "0.13.3+wasi-0.2.2" @@ -2114,6 +2829,19 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.100" @@ -2146,6 +2874,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "widestring" version = "1.1.0" @@ -2302,6 +3040,17 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link", + "windows-result 0.3.4", + "windows-strings", +] + [[package]] name = "windows-result" version = "0.1.2" @@ -2329,6 +3078,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.59.0" @@ -2448,6 +3206,36 @@ dependencies = [ "bitflags 2.9.0", ] +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zbus" version = "5.7.1" @@ -2474,7 +3262,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "windows-sys", + "windows-sys 0.59.0", "winnow", "zbus_macros", "zbus_names", @@ -2549,6 +3337,66 @@ dependencies = [ "syn", ] +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zvariant" version = "5.5.3" diff --git a/Cargo.toml b/Cargo.toml index 186731c..9b6e22d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ notify-rust = { version = "4.11.7", optional = true } gdk-pixbuf = { version = "0.3.0", optional = true } # DO NOT UPDATE winapi = { version = "0.3.9", optional = true, features = ["wincon", "winuser"] } tungstenite = "0.27.0" +reqwest = "0.12.20" [build-dependencies] winresource = { version = "0.1.20", optional = true } diff --git a/src/chat/config.rs b/src/chat/config.rs index 77e71ff..9e828a9 100644 --- a/src/chat/config.rs +++ b/src/chat/config.rs @@ -59,6 +59,8 @@ pub struct Config { pub proxy: Option, #[serde(default = "default_true")] pub notifications_enabled: bool, + #[serde(default = "default_true")] + pub new_ui_enabled: bool, #[serde(default)] pub debug_logs: bool, } @@ -148,6 +150,8 @@ pub struct Args { #[arg(long)] pub notifications_enabled: Option, #[arg(long)] + pub new_ui_enabled: Option, + #[arg(long)] pub proxy: Option, #[arg(long)] pub debug_logs: bool, @@ -200,6 +204,9 @@ impl Args { if let Some(v) = self.notifications_enabled { config.notifications_enabled = v } + if let Some(v) = self.new_ui_enabled { + config.new_ui_enabled = v + } if self.debug_logs { config.debug_logs = true } diff --git a/src/chat/gui.rs b/src/chat/gui.rs index 841fe46..9e96d27 100644 --- a/src/chat/gui.rs +++ b/src/chat/gui.rs @@ -1,4 +1,5 @@ use std::cell::RefCell; +use std::collections::HashMap; use std::error::Error; use std::sync::{atomic::Ordering, mpsc::channel, Arc, RwLock}; use std::thread; @@ -6,7 +7,8 @@ use std::time::{Duration, SystemTime}; use chrono::Local; -use gtk4::{self as gtk}; +use gtk4::ffi::GtkGrid; +use gtk4 as gtk; use gtk::gdk::{Cursor, Display, Texture}; use gtk::gdk_pixbuf::{Pixbuf, PixbufAnimation, PixbufLoader}; @@ -43,6 +45,8 @@ struct UiModel { notifications: Arc>>, #[cfg(all(not(feature = "libnotify"), not(feature = "notify-rust")))] notifications: Arc>>, + default_avatar: Pixbuf, + avatars: Arc>>, } thread_local!( @@ -203,6 +207,7 @@ fn open_settings(ctx: Arc, app: &Application) { gui_usize_entry_setting!("Konata Size", konata_size, ctx, settings_vbox); let remove_gui_shit_entry = gui_checkbox_setting!("Remove Gui Shit", remove_gui_shit, ctx, settings_vbox); + let new_ui_enabled_entry = gui_checkbox_setting!("New UI", new_ui_enabled, ctx, settings_vbox); let scrollable = ScrolledWindow::builder() .child(&settings_vbox) @@ -251,6 +256,8 @@ fn open_settings(ctx: Arc, app: &Application) { konata_size_entry, #[weak] remove_gui_shit_entry, + #[weak] + new_ui_enabled_entry, move |_| { let config = Config { host: host_entry.text().to_string(), @@ -315,6 +322,7 @@ fn open_settings(ctx: Arc, app: &Application) { formatting_enabled: formatting_enabled_entry.is_active(), commands_enabled: commands_enabled_entry.is_active(), notifications_enabled: notifications_enabled_entry.is_active(), + new_ui_enabled: new_ui_enabled_entry.is_active(), debug_logs: debug_logs_entry.is_active(), proxy: { let proxy = proxy_entry.text().to_string(); @@ -371,6 +379,8 @@ fn open_settings(ctx: Arc, app: &Application) { konata_size_entry, #[weak] remove_gui_shit_entry, + #[weak] + new_ui_enabled_entry, move |_| { let config = Config::default(); ctx.set_config(&config); @@ -391,6 +401,7 @@ fn open_settings(ctx: Arc, app: &Application) { oof_update_time_entry.set_text(&config.oof_update_time.to_string()); konata_size_entry.set_text(&config.konata_size.to_string()); remove_gui_shit_entry.set_active(config.remove_gui_shit); + new_ui_enabled_entry.set_active(config.new_ui_enabled); } )); let window = Window::builder() @@ -779,6 +790,8 @@ fn build_ui(ctx: Arc, app: &Application) -> UiModel { notifications: Arc::new(RwLock::new(Vec::::new())), #[cfg(all(not(feature = "libnotify"), not(feature = "notify-rust")))] notifications: Arc::new(RwLock::new(Vec::::new())), + default_avatar: load_pixbuf(include_bytes!("images/avatar.png")).unwrap(), + avatars: Arc::new(RwLock::new(HashMap::new())), } } @@ -929,23 +942,13 @@ fn send_notification(_: Arc, ui: &UiModel, title: &str, message: &str) ui.notifications.write().unwrap().push(id); } -fn on_add_message(ctx: Arc, ui: &UiModel, message: String, notify: bool) { - let notify = notify && ctx.config(|c| c.notifications_enabled); - - let formatting_enabled = ctx.config(|c| c.formatting_enabled); - - let Some(sanitized) = (if formatting_enabled { - sanitize_message(message.clone()) - } else { - Some(message.clone()) - }) else { - return; - }; - - if sanitized.is_empty() { - return; - } - +fn get_message_box( + ctx: Arc, + ui: &UiModel, + message: String, + notify: bool, + formatting_enabled: bool, +) -> GtkBox { // TODO: softcode these colors let (ip_color, date_color, text_color) = if ui.is_dark_theme { @@ -956,7 +959,7 @@ fn on_add_message(ctx: Arc, ui: &UiModel, message: String, notify: bool let mut label = String::new(); - if let (true, Some((date, ip, content, nick, avatar))) = + if let (true, Some((date, ip, content, nick, _))) = (formatting_enabled, parse_message(message.clone())) { if let Some(ip) = ip { @@ -1031,7 +1034,133 @@ fn on_add_message(ctx: Arc, ui: &UiModel, message: String, notify: bool hbox.set_hexpand(true); - ui.chat_box.append(&hbox); + hbox +} + +fn load_avatar(ui: &UiModel, url: &str) -> Option { + Some(ui.default_avatar.clone()) +} + +fn get_new_message_box( + ctx: Arc, + ui: &UiModel, + message: String, + notify: bool, + formatting_enabled: bool, +) -> GtkBox { + // TODO: softcode these colors + + let (ip_color, date_color, text_color) = if ui.is_dark_theme { + ("#494949", "#929292", "#FFFFFF") + } else { + ("#585858", "#292929", "#000000") + }; + + let (date, ip, content, name, color, avatar) = + if let (true, Some((date, ip, content, nick, avatar))) = + (formatting_enabled, parse_message(message.clone())) + { + ( + date, + ip, + content, + nick.as_ref() + .map(|o| o.0.to_string()) + .unwrap_or("System".to_string()), + nick.as_ref() + .map(|o| o.1.to_string()) + .unwrap_or("#DDDDDD".to_string()), + avatar + .and_then(|o| load_avatar(ui, &o)) + .unwrap_or(ui.default_avatar.clone()), + ) + } else { + ( + Local::now().format("%d.%m.%Y %H:%M").to_string(), + None, + message, + "System".to_string(), + "#DDDDDD".to_string(), + ui.default_avatar.clone(), + ) + }; + + let hbox = GtkBox::new(Orientation::Horizontal, 2); + + let avatar_picture = Picture::for_pixbuf(&avatar); + avatar_picture.set_css_classes(&["message-avatar"]); + avatar_picture.set_size_request(32, 32); + avatar_picture.set_vexpand(false); + avatar_picture.set_hexpand(false); + avatar_picture.set_valign(Align::Start); + avatar_picture.set_halign(Align::Start); + + hbox.append(&avatar_picture); + + let vbox = GtkBox::new(Orientation::Vertical, 2); + + vbox.append(&Label::builder() + .label(format!( + "{} {} {}", + glib::markup_escape_text(&name), + glib::markup_escape_text(&date), + glib::markup_escape_text(&ip.unwrap_or_default()), + )) + .halign(Align::Start) + .valign(Align::Start) + .selectable(true) + .wrap(true) + .wrap_mode(WrapMode::WordChar) + .use_markup(true) + .vexpand(true) + .build()); + + vbox.append(&Label::builder() + .label(format!( + "{}", + glib::markup_escape_text(&content) + )) + .halign(Align::Start) + .valign(Align::Start) + .selectable(true) + .wrap(true) + .wrap_mode(WrapMode::WordChar) + .use_markup(true) + .vexpand(true) + .build()); + + vbox.set_valign(Align::Fill); + vbox.set_halign(Align::Fill); + vbox.set_vexpand(true); + vbox.set_hexpand(true); + + hbox.append(&vbox); + + hbox +} + +fn on_add_message(ctx: Arc, ui: &UiModel, message: String, notify: bool) { + let notify = notify && ctx.config(|c| c.notifications_enabled); + + let formatting_enabled = ctx.config(|c| c.formatting_enabled); + + let Some(sanitized) = (if formatting_enabled { + sanitize_message(message.clone()) + } else { + Some(message.clone()) + }) else { + return; + }; + + if sanitized.is_empty() { + return; + } + + if ctx.config(|o| o.new_ui_enabled) { + ui.chat_box.append(&get_new_message_box(ctx.clone(), ui, message, notify, formatting_enabled)); + } else { + ui.chat_box.append(&get_message_box(ctx.clone(), ui, message, notify, formatting_enabled)); + } timeout_add_local_once(Duration::from_millis(1000), move || { GLOBAL.with(|global| { diff --git a/src/chat/images/avatar.png b/src/chat/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb612db34d12d0358be07b0384a49b96187558e GIT binary patch literal 6025 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 E05ooI00000 literal 0 HcmV?d00001 diff --git a/src/chat/styles/dark.css b/src/chat/styles/dark.css index 0f797e1..0e0e180 100644 --- a/src/chat/styles/dark.css +++ b/src/chat/styles/dark.css @@ -1,6 +1,6 @@ /* Now made with GTK Pango Markup */ -/* .message-content { color:rgb(255, 255, 255); } +.message-content { color:rgb(255, 255, 255); } .message-date { color:rgb(146, 146, 146); } -.message-ip { color:rgb(73, 73, 73); } */ +.message-ip { color:rgb(73, 73, 73); } diff --git a/src/chat/styles/light.css b/src/chat/styles/light.css index 0ee33f1..5f18ec5 100644 --- a/src/chat/styles/light.css +++ b/src/chat/styles/light.css @@ -1,6 +1,6 @@ /* Now made with GTK Pango Markup */ -/* .message-content { color:rgb(0, 0, 0); } +.message-content { color:rgb(0, 0, 0); } .message-date { color:rgb(41, 41, 41); } -.message-ip { color:rgb(88, 88, 88); } */ \ No newline at end of file +.message-ip { color:rgb(88, 88, 88); } \ No newline at end of file diff --git a/src/chat/styles/style.css b/src/chat/styles/style.css index 1f8add7..8b3c6ed 100644 --- a/src/chat/styles/style.css +++ b/src/chat/styles/style.css @@ -14,11 +14,15 @@ font-weight: bold; } +.message-avatar { + border-radius: 64px; +} + /* Now made with GTK Pango Markup */ -/* .message-name { font-weight: bold; } +.message-name { font-weight: bold; } -.message-name-green { color: #70fa7a; } +/* .message-name-green { color: #70fa7a; } .message-name-red { color: #fa7070; } .message-name-magenta { color: #da70fa; } .message-name-cyan { color: #70fadc; } */ \ No newline at end of file