Skip to content

Commit 2380af6

Browse files
committed
feat(WidgetDriver): Send state from state sync and not from timeline to widget
1 parent ab61077 commit 2380af6

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::Raw,
3334
RoomId, TransactionId,
@@ -164,21 +165,31 @@ impl MatrixDriver {
164165
pub(crate) fn events(&self) -> EventReceiver {
165166
let (tx, rx) = unbounded_channel();
166167
let room_id = self.room.room_id().to_owned();
167-
let handle = self.room.add_event_handler(move |raw: Raw<AnySyncTimelineEvent>| {
168-
let _ = tx.send(attach_room_id(&raw, &room_id));
168+
169+
let _tx = tx.clone();
170+
let _room_id = room_id.clone();
171+
let handle_msg_like =
172+
self.room.add_event_handler(move |raw: Raw<AnySyncMessageLikeEvent>| {
173+
let _ = _tx.send(attach_room_id(raw.cast_ref(), &_room_id));
174+
async {}
175+
});
176+
let drop_guard_msg_like = self.room.client().event_handler_drop_guard(handle_msg_like);
177+
178+
let handle_state = self.room.add_event_handler(move |raw: Raw<AnySyncStateEvent>| {
179+
let _ = tx.send(attach_room_id(raw.cast_ref(), &room_id));
169180
async {}
170181
});
182+
let drop_guard_state = self.room.client().event_handler_drop_guard(handle_state);
171183

172-
let drop_guard = self.room.client().event_handler_drop_guard(handle);
173-
EventReceiver { rx, _drop_guard: drop_guard }
184+
EventReceiver { rx, _drop_guards: [drop_guard_msg_like, drop_guard_state] }
174185
}
175186
}
176187

177188
/// A simple entity that wraps an `UnboundedReceiver`
178189
/// along with the drop guard for the room event handler.
179190
pub(crate) struct EventReceiver {
180191
rx: UnboundedReceiver<Raw<AnyTimelineEvent>>,
181-
_drop_guard: EventHandlerDropGuard,
192+
_drop_guards: [EventHandlerDropGuard; 2],
182193
}
183194

184195
impl EventReceiver {

0 commit comments

Comments
 (0)