This commit is contained in:
2026-07-29 17:14:55 +07:00
parent 5945251a60
commit 480039c6c5
3 changed files with 23 additions and 44 deletions

View File

@@ -1,4 +1,4 @@
use std::collections::{BTreeMap, BTreeSet, HashSet};
use std::collections::{BTreeMap, HashSet};
use std::sync::{Arc, RwLock};
pub use actions::*;
@@ -53,8 +53,8 @@ pub struct ChatPanel {
/// Message list state
list_state: ListState,
/// All messages
messages: BTreeSet<Message>,
/// All messages (sorted by created_at)
messages: Vec<Message>,
/// Mapping message ids to their rendered texts
rendered_texts_by_id: BTreeMap<EventId, RenderedText>,
@@ -98,7 +98,7 @@ impl ChatPanel {
let reports_by_id = Arc::new(RwLock::new(BTreeMap::new()));
// Define list of messages
let messages = BTreeSet::default();
let messages = Vec::new();
let list_state = ListState::new(messages.len(), ListAlignment::Bottom, px(1024.));
// Get room id and name
@@ -424,9 +424,10 @@ impl ChatPanel {
E: Into<Message>,
{
let old_len = self.messages.len();
let msg: Message = m.into();
// Extend the messages list with the new events
if self.messages.insert(m.into()) {
if let Err(pos) = self.messages.binary_search(&msg) {
self.messages.insert(pos, msg);
self.list_state.splice(old_len..old_len, 1);
if scroll {
@@ -778,10 +779,8 @@ impl ChatPanel {
return true;
}
let mut iter = self.messages.iter();
if let Some(previous) = iter.nth(ix - 1)
&& let Some(current) = iter.next()
if let Some(previous) = self.messages.get(ix - 1)
&& let Some(current) = self.messages.get(ix)
{
if current.author != previous.author {
return true;
@@ -804,7 +803,7 @@ impl ChatPanel {
window: &mut Window,
cx: &mut Context<Self>,
) -> AnyElement {
if let Some(message) = self.messages.iter().nth(ix) {
if let Some(message) = self.messages.get(ix) {
let persons = PersonRegistry::global(cx);
let show_author = self.is_group_start(ix);
let text = self