diff --git a/crates/chats/src/lib.rs b/crates/chats/src/lib.rs index e22e6a7..acb3bba 100644 --- a/crates/chats/src/lib.rs +++ b/crates/chats/src/lib.rs @@ -1,6 +1,6 @@ use std::{ cmp::Reverse, - collections::{BTreeMap, HashMap}, + collections::{BTreeMap, HashMap, HashSet} }; use account::Account; @@ -181,6 +181,7 @@ impl ChatRegistry { let events = send_events.merge(recv_events); let mut room_map: HashMap = HashMap::new(); + let mut trusted_keys: HashSet = HashSet::new(); // Process each event and group by room hash for event in events @@ -189,10 +190,18 @@ impl ChatRegistry { { let hash = room_hash(&event); - // Check if room's author is seen in any contact list - let filter = Filter::new().kind(Kind::ContactList).pubkey(event.pubkey); - // If room's author is seen at least once, mark as trusted - let is_trust = client.database().count(filter).await? >= 1; + let mut is_trust = trusted_keys.contains(&event.pubkey); + + if is_trust == false { + // Check if room's author is seen in any contact list + let filter = Filter::new().kind(Kind::ContactList).pubkey(event.pubkey); + // If room's author is seen at least once, mark as trusted + is_trust = client.database().count(filter).await? >= 1; + + if is_trust { + trusted_keys.insert(event.pubkey); + } + } room_map .entry(hash) diff --git a/crates/coop/src/main.rs b/crates/coop/src/main.rs index 3fcc05f..f72d1e5 100644 --- a/crates/coop/src/main.rs +++ b/crates/coop/src/main.rs @@ -147,6 +147,8 @@ fn main() { let new_id = SubscriptionId::new(NEW_MESSAGE_SUB_ID); let mut notifications = client.notifications(); + let mut processed_events: HashSet = HashSet::new(); + while let Ok(notification) = notifications.recv().await { if let RelayPoolNotification::Message { message, .. } = notification { match message { @@ -154,6 +156,9 @@ fn main() { event, subscription_id, } => { + if processed_events.contains(&event.id) { continue } + processed_events.insert(event.id); + match event.kind { Kind::GiftWrap => { let event = match get_unwrapped(event.id).await {