Skip to content

Commit 2232092

Browse files
authored
refactor(sdk): Move timeline event handling fns to TimelineInner
1 parent 2547d6e commit 2232092

File tree

2 files changed

+75
-75
lines changed

2 files changed

+75
-75
lines changed

crates/matrix-sdk/src/room/timeline/event_handler.rs

+72-70
Original file line numberDiff line numberDiff line change
@@ -40,79 +40,81 @@ use super::{
4040
TimelineKey,
4141
};
4242

43-
pub(super) fn handle_live_event(
44-
raw: Raw<AnySyncTimelineEvent>,
45-
encryption_info: Option<EncryptionInfo>,
46-
own_user_id: &UserId,
47-
timeline: &TimelineInner,
48-
) {
49-
handle_remote_event(raw, encryption_info, own_user_id, TimelineItemPosition::End, timeline)
50-
}
43+
impl TimelineInner {
44+
pub(super) fn handle_live_event(
45+
&self,
46+
raw: Raw<AnySyncTimelineEvent>,
47+
encryption_info: Option<EncryptionInfo>,
48+
own_user_id: &UserId,
49+
) {
50+
self.handle_remote_event(raw, encryption_info, own_user_id, TimelineItemPosition::End)
51+
}
5152

52-
pub(super) fn handle_local_event(
53-
txn_id: OwnedTransactionId,
54-
content: AnyMessageLikeEventContent,
55-
own_user_id: &UserId,
56-
timeline: &TimelineInner,
57-
) {
58-
let meta = TimelineEventMetadata {
59-
sender: own_user_id.to_owned(),
60-
origin_server_ts: None,
61-
raw_event: None,
62-
is_own_event: true,
63-
relations: None,
64-
// FIXME: Should we supply something here for encrypted rooms?
65-
encryption_info: None,
66-
};
67-
68-
let flow = Flow::Local { txn_id };
69-
let kind = TimelineEventKind::Message { content };
70-
71-
TimelineEventHandler::new(meta, flow, timeline).handle_event(kind)
72-
}
53+
pub(super) fn handle_local_event(
54+
&self,
55+
txn_id: OwnedTransactionId,
56+
content: AnyMessageLikeEventContent,
57+
own_user_id: &UserId,
58+
) {
59+
let meta = TimelineEventMetadata {
60+
sender: own_user_id.to_owned(),
61+
origin_server_ts: None,
62+
raw_event: None,
63+
is_own_event: true,
64+
relations: None,
65+
// FIXME: Should we supply something here for encrypted rooms?
66+
encryption_info: None,
67+
};
7368

74-
pub(super) fn handle_back_paginated_event(
75-
raw: Raw<AnySyncTimelineEvent>,
76-
encryption_info: Option<EncryptionInfo>,
77-
own_user_id: &UserId,
78-
timeline: &TimelineInner,
79-
) {
80-
handle_remote_event(raw, encryption_info, own_user_id, TimelineItemPosition::Start, timeline)
81-
}
69+
let flow = Flow::Local { txn_id };
70+
let kind = TimelineEventKind::Message { content };
8271

83-
fn handle_remote_event(
84-
raw: Raw<AnySyncTimelineEvent>,
85-
encryption_info: Option<EncryptionInfo>,
86-
own_user_id: &UserId,
87-
position: TimelineItemPosition,
88-
timeline: &TimelineInner,
89-
) {
90-
let event = match raw.deserialize() {
91-
Ok(ev) => ev,
92-
Err(_e) => {
93-
// TODO: Add some sort of error timeline item
94-
return;
95-
}
96-
};
97-
98-
let sender = event.sender().to_owned();
99-
let is_own_event = sender == own_user_id;
100-
101-
let meta = TimelineEventMetadata {
102-
raw_event: Some(raw),
103-
sender,
104-
origin_server_ts: Some(event.origin_server_ts()),
105-
is_own_event,
106-
relations: event.relations().cloned(),
107-
encryption_info,
108-
};
109-
let flow = Flow::Remote {
110-
event_id: event.event_id().to_owned(),
111-
txn_id: event.transaction_id().map(ToOwned::to_owned),
112-
position,
113-
};
114-
115-
TimelineEventHandler::new(meta, flow, timeline).handle_event(event.into())
72+
TimelineEventHandler::new(meta, flow, self).handle_event(kind)
73+
}
74+
75+
pub(super) fn handle_back_paginated_event(
76+
&self,
77+
raw: Raw<AnySyncTimelineEvent>,
78+
encryption_info: Option<EncryptionInfo>,
79+
own_user_id: &UserId,
80+
) {
81+
self.handle_remote_event(raw, encryption_info, own_user_id, TimelineItemPosition::Start)
82+
}
83+
84+
fn handle_remote_event(
85+
&self,
86+
raw: Raw<AnySyncTimelineEvent>,
87+
encryption_info: Option<EncryptionInfo>,
88+
own_user_id: &UserId,
89+
position: TimelineItemPosition,
90+
) {
91+
let event = match raw.deserialize() {
92+
Ok(ev) => ev,
93+
Err(_e) => {
94+
// TODO: Add some sort of error timeline item
95+
return;
96+
}
97+
};
98+
99+
let sender = event.sender().to_owned();
100+
let is_own_event = sender == own_user_id;
101+
102+
let meta = TimelineEventMetadata {
103+
raw_event: Some(raw),
104+
sender,
105+
origin_server_ts: Some(event.origin_server_ts()),
106+
is_own_event,
107+
relations: event.relations().cloned(),
108+
encryption_info,
109+
};
110+
let flow = Flow::Remote {
111+
event_id: event.event_id().to_owned(),
112+
txn_id: event.transaction_id().map(ToOwned::to_owned),
113+
position,
114+
};
115+
116+
TimelineEventHandler::new(meta, flow, self).handle_event(event.into())
117+
}
116118
}
117119

118120
enum Flow {

crates/matrix-sdk/src/room/timeline/mod.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ mod event_handler;
4242
mod event_item;
4343
mod virtual_item;
4444

45-
use self::event_handler::{handle_back_paginated_event, handle_live_event, handle_local_event};
4645
pub use self::{
4746
event_item::{
4847
EventTimelineItem, Message, PaginationOutcome, ReactionDetails, TimelineDetails,
@@ -81,7 +80,7 @@ impl Timeline {
8180
move |event, encryption_info: Option<EncryptionInfo>, room: Room| {
8281
let inner = inner.clone();
8382
async move {
84-
handle_live_event(event, encryption_info, room.own_user_id(), &inner);
83+
inner.handle_live_event(event, encryption_info, room.own_user_id());
8584
}
8685
}
8786
});
@@ -113,11 +112,10 @@ impl Timeline {
113112

114113
let own_user_id = self.room.own_user_id();
115114
for room_ev in messages.chunk {
116-
handle_back_paginated_event(
115+
self.inner.handle_back_paginated_event(
117116
room_ev.event.cast(),
118117
room_ev.encryption_info,
119118
own_user_id,
120-
&self.inner,
121119
);
122120
}
123121

@@ -175,7 +173,7 @@ impl Timeline {
175173
txn_id: Option<&TransactionId>,
176174
) -> Result<()> {
177175
let txn_id = txn_id.map_or_else(TransactionId::new, ToOwned::to_owned);
178-
handle_local_event(txn_id.clone(), content.clone(), self.room.own_user_id(), &self.inner);
176+
self.inner.handle_local_event(txn_id.clone(), content.clone(), self.room.own_user_id());
179177

180178
// If this room isn't actually in joined state, we'll get a server error.
181179
// Not ideal, but works for now.

0 commit comments

Comments
 (0)