Skip to content

Commit ca4df5f

Browse files
committed
send state from state sync and not from timeline to widget
1 parent 1b1a0fb commit ca4df5f

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

crates/matrix-sdk/src/widget/matrix.rs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ use ruma::{
2626
},
2727
assign,
2828
events::{
29-
AnyMessageLikeEventContent, AnyStateEventContent, AnySyncTimelineEvent, AnyTimelineEvent,
30-
MessageLikeEventType, StateEventType, TimelineEventType,
29+
AnyMessageLikeEventContent, AnyStateEventContent, AnySyncMessageLikeEvent,
30+
AnySyncStateEvent, AnySyncTimelineEvent, AnyTimelineEvent, MessageLikeEventType,
31+
StateEventType, TimelineEventType,
3132
},
3233
serde::{from_raw_json_value, Raw},
3334
EventId, RoomId, TransactionId,
@@ -175,21 +176,31 @@ impl MatrixDriver {
175176
pub(crate) fn events(&self) -> EventReceiver {
176177
let (tx, rx) = unbounded_channel();
177178
let room_id = self.room.room_id().to_owned();
178-
let handle = self.room.add_event_handler(move |raw: Raw<AnySyncTimelineEvent>| {
179-
let _ = tx.send(attach_room_id(&raw, &room_id));
179+
180+
let _tx = tx.clone();
181+
let _room_id = room_id.clone();
182+
let handle_msg_like =
183+
self.room.add_event_handler(move |raw: Raw<AnySyncMessageLikeEvent>| {
184+
let _ = _tx.send(attach_room_id(raw.cast_ref(), &_room_id));
185+
async {}
186+
});
187+
let drop_guard_msg_like = self.room.client().event_handler_drop_guard(handle_msg_like);
188+
189+
let handle_state = self.room.add_event_handler(move |raw: Raw<AnySyncStateEvent>| {
190+
let _ = tx.send(attach_room_id(raw.cast_ref(), &room_id));
180191
async {}
181192
});
193+
let drop_guard_state = self.room.client().event_handler_drop_guard(handle_state);
182194

183-
let drop_guard = self.room.client().event_handler_drop_guard(handle);
184-
EventReceiver { rx, _drop_guard: drop_guard }
195+
EventReceiver { rx, _drop_guards: [drop_guard_msg_like, drop_guard_state] }
185196
}
186197
}
187198

188199
/// A simple entity that wraps an `UnboundedReceiver`
189200
/// along with the drop guard for the room event handler.
190201
pub(crate) struct EventReceiver {
191202
rx: UnboundedReceiver<Raw<AnyTimelineEvent>>,
192-
_drop_guard: EventHandlerDropGuard,
203+
_drop_guards: [EventHandlerDropGuard; 2],
193204
}
194205

195206
impl EventReceiver {

0 commit comments

Comments
 (0)