From e7ffe7627c1225bf9a9efd7e77b95b3d5ebbbcb7 Mon Sep 17 00:00:00 2001 From: reya <123083837+reyamir@users.noreply.github.com> Date: Mon, 1 Sep 2025 08:22:04 +0700 Subject: [PATCH] chore: fix double messages on load (#134) --- crates/coop/src/chatspace.rs | 2 +- crates/coop/src/views/chat/mod.rs | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/crates/coop/src/chatspace.rs b/crates/coop/src/chatspace.rs index 658eb05..179e373 100644 --- a/crates/coop/src/chatspace.rs +++ b/crates/coop/src/chatspace.rs @@ -248,7 +248,7 @@ impl ChatSpace { } } - smol::Timer::after(Duration::from_secs(1)).await; + smol::Timer::after(Duration::from_millis(300)).await; } } diff --git a/crates/coop/src/views/chat/mod.rs b/crates/coop/src/views/chat/mod.rs index 75242d3..4916a75 100644 --- a/crates/coop/src/views/chat/mod.rs +++ b/crates/coop/src/views/chat/mod.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::collections::{BTreeSet, HashMap}; use anyhow::anyhow; use common::display::{ReadableProfile, ReadableTimestamp}; @@ -54,7 +54,7 @@ pub struct Chat { // Chat Room room: Entity, list_state: ListState, - messages: Vec, + messages: BTreeSet, rendered_texts_by_id: HashMap, reports_by_id: HashMap>, // New Message @@ -154,7 +154,7 @@ impl Chat { focus_handle: cx.focus_handle(), uploading: false, sending: false, - messages: Vec::new(), + messages: BTreeSet::new(), rendered_texts_by_id: HashMap::new(), reports_by_id: HashMap::new(), room, @@ -340,7 +340,7 @@ impl Chat { let new_len = 1; // Extend the messages list with the new events - self.messages.push(event.into()); + self.messages.insert(event.into()); // Update list state with the new messages self.list_state.splice(old_len..old_len, new_len); @@ -359,7 +359,6 @@ impl Chat { // Extend the messages list with the new events self.messages.extend(events); - self.messages.sort_by_key(|ev| ev.created_at); // Update list state with the new messages self.list_state.splice(old_len..old_len, new_len); @@ -527,7 +526,7 @@ impl Chat { window: &mut Window, cx: &mut Context, ) -> Stateful
{ - let Some(message) = self.messages.get(ix) else { + let Some(message) = self.messages.iter().nth(ix) else { return div().id(ix); };