chore: release 0.1.4

This commit is contained in:
2025-03-13 13:02:58 +07:00
parent 0a7f0475a4
commit cae96157ca
8 changed files with 85 additions and 51 deletions

View File

@@ -98,6 +98,7 @@ pub struct Chat {
// Chat Room
room: WeakEntity<Room>,
messages: Entity<Vec<Message>>,
seens: Entity<Vec<EventId>>,
list_state: ListState,
#[allow(dead_code)]
subscriptions: Vec<Subscription>,
@@ -116,6 +117,7 @@ impl Chat {
cx: &mut App,
) -> Entity<Self> {
let messages = cx.new(|_| vec![Message::placeholder()]);
let seens = cx.new(|_| vec![]);
let attaches = cx.new(|_| None);
let input = cx.new(|cx| {
TextInput::new(window, cx)
@@ -165,6 +167,7 @@ impl Chat {
id: id.to_string().into(),
room,
messages,
seens,
list_state,
input,
attaches,
@@ -244,11 +247,18 @@ impl Chat {
self.list_state.splice(old_len..old_len, 1);
}
fn push_message(&self, event: &Event, _window: &mut Window, cx: &mut Context<Self>) {
fn push_message(&mut self, event: &Event, _window: &mut Window, cx: &mut Context<Self>) {
let Some(model) = self.room.upgrade() else {
return;
};
// Prevent duplicate messages
if self.seens.read(cx).iter().any(|id| id == &event.id) {
return;
}
// Add ID to seen list
self.seen(event.id, cx);
let old_len = self.messages.read(cx).len();
let room = model.read(cx);
@@ -450,6 +460,13 @@ impl Chat {
cx.notify();
}
fn seen(&mut self, id: EventId, cx: &mut Context<Self>) {
self.seens.update(cx, |this, cx| {
this.push(id);
cx.notify();
});
}
fn render_message(
&self,
ix: usize,