From 5e5f286cfefef16697bfd668dbc6964d714df544 Mon Sep 17 00:00:00 2001 From: reya Date: Thu, 26 Dec 2024 08:44:51 +0700 Subject: [PATCH] wip: refactor --- Cargo.lock | 188 +++++++++---------- crates/app/src/states/chat.rs | 2 +- crates/app/src/views/dock/inbox/item.rs | 230 ++++++++++-------------- crates/app/src/views/dock/inbox/mod.rs | 33 +++- crates/ui/src/dock/tab_panel.rs | 9 +- 5 files changed, 221 insertions(+), 241 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea40ba0b..754e4604 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,9 +84,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "arbitrary" @@ -102,7 +102,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -163,9 +163,9 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ "event-listener 5.3.1", "event-listener-strategy", @@ -357,7 +357,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -392,7 +392,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -532,7 +532,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -695,7 +695,7 @@ source = "git+https://github.com/kvark/blade?rev=099555282605c7c4cca9e66a8f40148 dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -770,22 +770,22 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -854,7 +854,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.90", + "syn 2.0.91", "tempfile", "toml", ] @@ -1040,7 +1040,7 @@ dependencies = [ [[package]] name = "collections" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "rustc-hash 1.1.0", ] @@ -1313,7 +1313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -1362,13 +1362,13 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] name = "derive_refineable" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "proc-macro2", "quote", @@ -1435,7 +1435,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -1539,7 +1539,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -1799,7 +1799,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -1922,7 +1922,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -2080,7 +2080,7 @@ dependencies = [ [[package]] name = "gpui" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "anyhow", "as-raw-xcb-connection", @@ -2165,7 +2165,7 @@ dependencies = [ [[package]] name = "gpui_macros" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "proc-macro2", "quote", @@ -2376,7 +2376,7 @@ dependencies = [ [[package]] name = "http_client" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "anyhow", "bytes", @@ -2417,9 +2417,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.4" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6884a48c6826ec44f524c7456b163cebe9e55a18d7b5e307cb4f100371cc767" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", @@ -2591,7 +2591,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -2700,7 +2700,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -2920,7 +2920,7 @@ checksum = "edbe595006d355eaf9ae11db92707d4338cd2384d16866131cc1afdbdd35d8d9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -3041,7 +3041,7 @@ dependencies = [ [[package]] name = "media" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "anyhow", "bindgen", @@ -3208,7 +3208,7 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "nostr" version = "0.37.0" -source = "git+https://github.com/rust-nostr/nostr#2efdc69ad385b51b1c5f93706bfeeff5b6dd4d41" +source = "git+https://github.com/rust-nostr/nostr#53e453ee99158a11eea8249dce536917917bcd15" dependencies = [ "aes", "async-trait", @@ -3239,7 +3239,7 @@ dependencies = [ [[package]] name = "nostr-database" version = "0.37.0" -source = "git+https://github.com/rust-nostr/nostr#2efdc69ad385b51b1c5f93706bfeeff5b6dd4d41" +source = "git+https://github.com/rust-nostr/nostr#53e453ee99158a11eea8249dce536917917bcd15" dependencies = [ "async-trait", "flatbuffers", @@ -3250,7 +3250,7 @@ dependencies = [ [[package]] name = "nostr-lmdb" version = "0.37.0" -source = "git+https://github.com/rust-nostr/nostr#2efdc69ad385b51b1c5f93706bfeeff5b6dd4d41" +source = "git+https://github.com/rust-nostr/nostr#53e453ee99158a11eea8249dce536917917bcd15" dependencies = [ "async-utility", "heed", @@ -3262,7 +3262,7 @@ dependencies = [ [[package]] name = "nostr-relay-pool" version = "0.37.0" -source = "git+https://github.com/rust-nostr/nostr#2efdc69ad385b51b1c5f93706bfeeff5b6dd4d41" +source = "git+https://github.com/rust-nostr/nostr#53e453ee99158a11eea8249dce536917917bcd15" dependencies = [ "async-utility", "async-wsocket", @@ -3278,7 +3278,7 @@ dependencies = [ [[package]] name = "nostr-sdk" version = "0.37.0" -source = "git+https://github.com/rust-nostr/nostr#2efdc69ad385b51b1c5f93706bfeeff5b6dd4d41" +source = "git+https://github.com/rust-nostr/nostr#53e453ee99158a11eea8249dce536917917bcd15" dependencies = [ "async-utility", "lnurl-pay", @@ -3294,7 +3294,7 @@ dependencies = [ [[package]] name = "nostr-zapper" version = "0.37.0" -source = "git+https://github.com/rust-nostr/nostr#2efdc69ad385b51b1c5f93706bfeeff5b6dd4d41" +source = "git+https://github.com/rust-nostr/nostr#53e453ee99158a11eea8249dce536917917bcd15" dependencies = [ "async-trait", "nostr", @@ -3369,7 +3369,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -3433,9 +3433,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -3651,7 +3651,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -3686,7 +3686,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -3720,9 +3720,9 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" -version = "0.17.15" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -3812,7 +3812,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -3849,7 +3849,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -3889,7 +3889,7 @@ dependencies = [ "rustc-hash 2.1.0", "rustls", "socket2 0.5.8", - "thiserror 2.0.8", + "thiserror 2.0.9", "tokio", "tracing", ] @@ -3908,7 +3908,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.8", + "thiserror 2.0.9", "tinyvec", "tracing", "web-time", @@ -4094,7 +4094,7 @@ dependencies = [ [[package]] name = "refineable" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "derive_refineable", ] @@ -4221,7 +4221,7 @@ dependencies = [ [[package]] name = "reqwest_client" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "anyhow", "bytes", @@ -4298,7 +4298,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.90", + "syn 2.0.91", "walkdir", ] @@ -4499,7 +4499,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -4617,7 +4617,7 @@ checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" [[package]] name = "semantic_version" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "anyhow", "serde", @@ -4646,7 +4646,7 @@ checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -4657,7 +4657,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -4671,9 +4671,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ "indexmap", "itoa", @@ -4690,7 +4690,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -4931,7 +4931,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -4943,7 +4943,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sum_tree" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "arrayvec", "log", @@ -5068,9 +5068,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.90" +version = "2.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" dependencies = [ "proc-macro2", "quote", @@ -5103,7 +5103,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -5218,11 +5218,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.8" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" dependencies = [ - "thiserror-impl 2.0.8", + "thiserror-impl 2.0.9", ] [[package]] @@ -5233,18 +5233,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] name = "thiserror-impl" -version = "2.0.8" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -5315,9 +5315,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -5354,7 +5354,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -5467,7 +5467,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -5562,9 +5562,9 @@ dependencies = [ [[package]] name = "unicase" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-bidi" @@ -5706,7 +5706,7 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "util" version = "0.1.0" -source = "git+https://github.com/zed-industries/zed#3632b36fde4c4e73eadc7e231d7b040a3b7fb55b" +source = "git+https://github.com/zed-industries/zed#95911aaa1450b6e613139298b676e15cdb928ec1" dependencies = [ "anyhow", "async-fs 1.6.0", @@ -5716,6 +5716,8 @@ dependencies = [ "futures", "futures-lite 1.13.0", "globset", + "itertools 0.13.0", + "libc", "log", "regex", "rust-embed", @@ -5875,7 +5877,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "wasm-bindgen-shared", ] @@ -5910,7 +5912,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6125,7 +6127,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -6136,7 +6138,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -6491,7 +6493,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "synstructure", ] @@ -6578,7 +6580,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "zvariant_utils 2.1.0", ] @@ -6591,7 +6593,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "zbus_names 4.1.0", "zvariant 5.1.0", "zvariant_utils 3.0.2", @@ -6644,7 +6646,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -6664,7 +6666,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "synstructure", ] @@ -6685,7 +6687,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -6707,7 +6709,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -6772,7 +6774,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "zvariant_utils 2.1.0", ] @@ -6785,7 +6787,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", "zvariant_utils 3.0.2", ] @@ -6797,7 +6799,7 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.91", ] [[package]] @@ -6810,6 +6812,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.90", + "syn 2.0.91", "winnow", ] diff --git a/crates/app/src/states/chat.rs b/crates/app/src/states/chat.rs index 750b9fe0..09f3c180 100644 --- a/crates/app/src/states/chat.rs +++ b/crates/app/src/states/chat.rs @@ -14,7 +14,7 @@ pub struct Room { } impl Room { - pub fn new(event: Event) -> Self { + pub fn new(event: &Event) -> Self { let owner = event.pubkey; let last_seen = event.created_at; // Get all members from event's tag diff --git a/crates/app/src/views/dock/inbox/item.rs b/crates/app/src/views/dock/inbox/item.rs index ae86acea..c725e163 100644 --- a/crates/app/src/views/dock/inbox/item.rs +++ b/crates/app/src/views/dock/inbox/item.rs @@ -1,150 +1,33 @@ -use std::sync::Arc; - -use coop_ui::{theme::ActiveTheme, Selectable, StyledExt}; +use coop_ui::{theme::ActiveTheme, StyledExt}; use gpui::*; use nostr_sdk::prelude::*; use prelude::FluentBuilder; +use std::sync::Arc; use crate::{ constants::IMAGE_SERVICE, get_client, states::{chat::Room, metadata::MetadataRegistry, signal::SignalRegistry}, - utils::{ago, show_npub}, + utils::{ago, get_room_id, show_npub}, views::app::AddPanel, }; -#[derive(IntoElement)] -struct Item { - id: ElementId, - room: Arc, - metadata: Option, - // Interactive - base: Div, - selected: bool, -} - -impl Item { - pub fn new(room: Arc, metadata: Option) -> Self { - let id = SharedString::from(room.owner.to_hex()).into(); - - Self { - id, - room, - metadata, - base: div(), - selected: false, - } - } -} - -impl Selectable for Item { - fn selected(mut self, selected: bool) -> Self { - self.selected = selected; - self - } - - fn element_id(&self) -> &gpui::ElementId { - &self.id - } -} - -impl InteractiveElement for Item { - fn interactivity(&mut self) -> &mut gpui::Interactivity { - self.base.interactivity() - } -} - -impl RenderOnce for Item { - fn render(self, cx: &mut WindowContext) -> impl IntoElement { - let ago = ago(self.room.last_seen.as_u64()); - let fallback_name = show_npub(self.room.owner, 16); - - let mut content = div() - .font_medium() - .text_color(cx.theme().sidebar_accent_foreground); - - if let Some(metadata) = self.metadata.clone() { - content = content - .flex() - .items_center() - .gap_2() - .map(|this| { - if let Some(picture) = metadata.picture { - this.flex_shrink_0().child( - img(format!( - "{}/?url={}&w=100&h=100&n=-1", - IMAGE_SERVICE, picture - )) - .size_6() - .rounded_full() - .object_fit(ObjectFit::Cover), - ) - } else { - this.flex_shrink_0() - .child(img("brand/avatar.png").size_6().rounded_full()) - } - }) - .map(|this| { - if let Some(display_name) = metadata.display_name { - this.child(display_name) - } else { - this.child(fallback_name) - } - }) - } else { - content = content - .flex() - .items_center() - .gap_2() - .child( - img("brand/avatar.png") - .flex_shrink_0() - .size_6() - .rounded_full(), - ) - .child(fallback_name) - } - - self.base - .id(self.id) - .h_8() - .px_1() - .flex() - .items_center() - .justify_between() - .text_xs() - .rounded_md() - .hover(|this| { - this.bg(cx.theme().sidebar_accent) - .text_color(cx.theme().sidebar_accent_foreground) - }) - .child(content) - .child( - div() - .child(ago) - .text_color(cx.theme().sidebar_accent_foreground.opacity(0.7)), - ) - .on_click(move |_, cx| { - cx.dispatch_action(Box::new(AddPanel { - room: Arc::clone(&self.room), - position: coop_ui::dock::DockPlacement::Center, - })) - }) - } -} - pub struct InboxItem { - room: Arc, + id: SharedString, + event: Event, metadata: Model>, } impl InboxItem { pub fn new(event: Event, cx: &mut ViewContext<'_, Self>) -> Self { - let room = Arc::new(Room::new(event)); + let pubkeys: Vec = event.tags.public_keys().copied().collect(); + let id = get_room_id(&event.pubkey, &pubkeys).into(); let metadata = cx.new_model(|_| None); + drop(pubkeys); + // Request metadata - _ = cx.global::().tx.send(room.owner); + _ = cx.global::().tx.send(event.pubkey); // Reload when received metadata cx.observe_global::(|chat, cx| { @@ -152,11 +35,15 @@ impl InboxItem { }) .detach(); - Self { room, metadata } + Self { + id, + event, + metadata, + } } pub fn load_metadata(&mut self, cx: &mut ViewContext) { - let public_key = self.room.owner; + let public_key = self.event.pubkey; let async_metadata = self.metadata.clone(); let mut async_cx = cx.to_async(); @@ -179,19 +66,92 @@ impl InboxItem { } pub fn id(&self) -> String { - self.room.id.clone().into() + self.id.clone().into() } - fn render_item(&self, cx: &mut ViewContext) -> impl IntoElement { - let metadata = self.metadata.read(cx).clone(); - let room = Arc::clone(&self.room); + pub fn action(&self, cx: &mut WindowContext<'_>) { + println!("Test"); + let room = Arc::new(Room::new(&self.event)); - Item::new(room, metadata) + cx.dispatch_action(Box::new(AddPanel { + room, + position: coop_ui::dock::DockPlacement::Center, + })) } } impl Render for InboxItem { fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { - div().child(self.render_item(cx)) + let ago = ago(self.event.created_at.as_u64()); + let fallback_name = show_npub(self.event.pubkey, 16); + + let mut content = div() + .font_medium() + .text_color(cx.theme().sidebar_accent_foreground); + + if let Some(metadata) = self.metadata.read(cx).as_ref() { + content = content + .flex() + .items_center() + .gap_2() + .map(|this| { + if let Some(picture) = metadata.picture.clone() { + this.flex_shrink_0().child( + img(format!( + "{}/?url={}&w=100&h=100&n=-1", + IMAGE_SERVICE, picture + )) + .size_6() + .rounded_full() + .object_fit(ObjectFit::Cover), + ) + } else { + this.flex_shrink_0() + .child(img("brand/avatar.png").size_6().rounded_full()) + } + }) + .map(|this| { + if let Some(display_name) = metadata.display_name.clone() { + this.child(display_name) + } else { + this.child(fallback_name) + } + }) + } else { + content = content + .flex() + .items_center() + .gap_2() + .child( + img("brand/avatar.png") + .flex_shrink_0() + .size_6() + .rounded_full(), + ) + .child(fallback_name) + } + + div() + .id(self.id.clone()) + .h_8() + .px_1() + .flex() + .items_center() + .justify_between() + .text_xs() + .rounded_md() + .hover(|this| { + this.bg(cx.theme().sidebar_accent) + .text_color(cx.theme().sidebar_accent_foreground) + }) + .child(content) + .child( + div() + .child(ago) + .text_color(cx.theme().sidebar_accent_foreground.opacity(0.7)), + ) + .on_click(cx.listener(|this, _, cx| { + this.action(cx); + })) } } diff --git a/crates/app/src/views/dock/inbox/mod.rs b/crates/app/src/views/dock/inbox/mod.rs index f9bd42f7..b05fd876 100644 --- a/crates/app/src/views/dock/inbox/mod.rs +++ b/crates/app/src/views/dock/inbox/mod.rs @@ -43,9 +43,11 @@ impl Inbox { .into_iter() .filter(|m| { let keys = m.event.tags.public_keys().copied().collect::>(); - let nid = get_room_id(&m.event.pubkey, &keys); + let new_id = get_room_id(&m.event.pubkey, &keys); - current_rooms.iter().any(|id| id == &nid) + drop(keys); + + !current_rooms.iter().any(|id| id == &new_id) }) .map(|m| cx.new_view(|cx| InboxItem::new(m.event, cx))) .collect::>(); @@ -78,6 +80,14 @@ impl Inbox { // Hide loading indicator self.set_loading(cx); + let items = self.items.read(cx).as_ref(); + // Get all current rooms id + let current_rooms: Vec = if let Some(items) = items { + items.iter().map(|item| item.model.read(cx).id()).collect() + } else { + Vec::new() + }; + let async_items = self.items.clone(); let mut async_cx = cx.to_async(); @@ -109,12 +119,25 @@ impl Inbox { let views: Vec> = events .into_iter() + .filter(|ev| { + let keys = ev.tags.public_keys().copied().collect::>(); + let new_id = get_room_id(&ev.pubkey, &keys); + + drop(keys); + + !current_rooms.iter().any(|id| id == &new_id) + }) .map(|ev| async_cx.new_view(|cx| InboxItem::new(ev, cx)).unwrap()) .collect(); - async_cx.update_model(&async_items, |a, b| { - *a = Some(views); - b.notify(); + async_cx.update_model(&async_items, |model, cx| { + if let Some(items) = model { + items.extend(views); + } else { + *model = Some(views); + } + + cx.notify(); }) }) .detach(); diff --git a/crates/ui/src/dock/tab_panel.rs b/crates/ui/src/dock/tab_panel.rs index 40e2d5c6..00b1bafb 100644 --- a/crates/ui/src/dock/tab_panel.rs +++ b/crates/ui/src/dock/tab_panel.rs @@ -1,10 +1,5 @@ -use gpui::{ - div, prelude::FluentBuilder, px, rems, AppContext, Corner, DefiniteLength, DismissEvent, - DragMoveEvent, Empty, Entity, EventEmitter, FocusHandle, FocusableView, - InteractiveElement as _, IntoElement, ParentElement, Pixels, Render, ScrollHandle, - SharedString, StatefulInteractiveElement, Styled, View, ViewContext, VisualContext as _, - WeakView, WindowContext, -}; +use gpui::*; +use prelude::FluentBuilder; use std::sync::Arc; use super::{