Skip to content

Commit dcb8306

Browse files
committed
chore(ui): Remove the old latest event API.
So satisfying.
1 parent 3c29f14 commit dcb8306

File tree

7 files changed

+32
-837
lines changed

7 files changed

+32
-837
lines changed

crates/matrix-sdk-ui/src/timeline/event_item/content/mod.rs

Lines changed: 6 additions & 229 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,15 @@ use std::sync::Arc;
1616

1717
use as_variant::as_variant;
1818
use matrix_sdk::crypto::types::events::UtdCause;
19-
use matrix_sdk_base::latest_event::{PossibleLatestEvent, is_suitable_for_latest_event};
2019
use ruma::{
2120
OwnedDeviceId, OwnedEventId, OwnedMxcUri, OwnedUserId, UserId,
2221
events::{
23-
AnyFullStateEventContent, AnySyncTimelineEvent, FullStateEventContent, Mentions,
24-
MessageLikeEventType, StateEventType,
25-
call::{invite::SyncCallInviteEvent, notify::SyncCallNotifyEvent},
22+
AnyFullStateEventContent, FullStateEventContent, Mentions, MessageLikeEventType,
23+
StateEventType,
2624
policy::rule::{
2725
room::PolicyRuleRoomEventContent, server::PolicyRuleServerEventContent,
2826
user::PolicyRuleUserEventContent,
2927
},
30-
poll::unstable_start::{
31-
NewUnstablePollStartEventContent, SyncUnstablePollStartEvent,
32-
UnstablePollStartEventContent,
33-
},
3428
room::{
3529
aliases::RoomAliasesEventContent,
3630
avatar::RoomAvatarEventContent,
@@ -41,23 +35,22 @@ use ruma::{
4135
guest_access::RoomGuestAccessEventContent,
4236
history_visibility::RoomHistoryVisibilityEventContent,
4337
join_rules::RoomJoinRulesEventContent,
44-
member::{Change, RoomMemberEventContent, SyncRoomMemberEvent},
45-
message::{MessageType, Relation, SyncRoomMessageEvent},
38+
member::{Change, RoomMemberEventContent},
39+
message::MessageType,
4640
name::RoomNameEventContent,
4741
pinned_events::RoomPinnedEventsEventContent,
48-
power_levels::{RoomPowerLevels, RoomPowerLevelsEventContent},
42+
power_levels::RoomPowerLevelsEventContent,
4943
server_acl::RoomServerAclEventContent,
5044
third_party_invite::RoomThirdPartyInviteEventContent,
5145
tombstone::RoomTombstoneEventContent,
5246
topic::RoomTopicEventContent,
5347
},
5448
space::{child::SpaceChildEventContent, parent::SpaceParentEventContent},
55-
sticker::{StickerEventContent, SyncStickerEvent},
49+
sticker::StickerEventContent,
5650
},
5751
html::RemoveReplyFallback,
5852
room_version_rules::RedactionRules,
5953
};
60-
use tracing::warn;
6154

6255
mod message;
6356
mod msg_like;
@@ -121,222 +114,6 @@ pub enum TimelineItemContent {
121114
}
122115

123116
impl TimelineItemContent {
124-
/// If the supplied event is suitable to be used as a `latest_event` in a
125-
/// message preview, extract its contents and wrap it as a
126-
/// `TimelineItemContent`.
127-
pub(crate) fn from_latest_event_content(
128-
event: AnySyncTimelineEvent,
129-
power_levels_info: Option<(&UserId, &RoomPowerLevels)>,
130-
) -> Option<TimelineItemContent> {
131-
match is_suitable_for_latest_event(&event, power_levels_info) {
132-
PossibleLatestEvent::YesRoomMessage(m) => {
133-
Some(Self::from_suitable_latest_event_content(m))
134-
}
135-
PossibleLatestEvent::YesSticker(s) => {
136-
Some(Self::from_suitable_latest_sticker_content(s))
137-
}
138-
PossibleLatestEvent::YesPoll(poll) => {
139-
Some(Self::from_suitable_latest_poll_event_content(poll))
140-
}
141-
PossibleLatestEvent::YesCallInvite(call_invite) => {
142-
Some(Self::from_suitable_latest_call_invite_content(call_invite))
143-
}
144-
PossibleLatestEvent::YesCallNotify(call_notify) => {
145-
Some(Self::from_suitable_latest_call_notify_content(call_notify))
146-
}
147-
PossibleLatestEvent::NoUnsupportedEventType => {
148-
// TODO: when we support state events in message previews, this will need change
149-
warn!("Found a state event cached as latest_event! ID={}", event.event_id());
150-
None
151-
}
152-
PossibleLatestEvent::NoUnsupportedMessageLikeType => {
153-
// TODO: When we support reactions in message previews, this will need to change
154-
warn!(
155-
"Found an event cached as latest_event, but I don't know how \
156-
to wrap it in a TimelineItemContent. type={}, ID={}",
157-
event.event_type().to_string(),
158-
event.event_id()
159-
);
160-
None
161-
}
162-
PossibleLatestEvent::YesKnockedStateEvent(member) => {
163-
Some(Self::from_suitable_latest_knock_state_event_content(member))
164-
}
165-
PossibleLatestEvent::NoEncrypted => {
166-
warn!("Found an encrypted event cached as latest_event! ID={}", event.event_id());
167-
None
168-
}
169-
}
170-
}
171-
172-
/// Given some message content that is from an event that we have already
173-
/// determined is suitable for use as a latest event in a message preview,
174-
/// extract its contents and wrap it as a `TimelineItemContent`.
175-
fn from_suitable_latest_event_content(event: &SyncRoomMessageEvent) -> TimelineItemContent {
176-
match event {
177-
SyncRoomMessageEvent::Original(event) => {
178-
// Grab the content of this event
179-
let event_content = event.content.clone();
180-
181-
// Feed the bundled edit, if present, or we might miss showing edited content.
182-
let edit = event
183-
.unsigned
184-
.relations
185-
.replace
186-
.as_ref()
187-
.and_then(|boxed| match &boxed.content.relates_to {
188-
Some(Relation::Replacement(re)) => Some(re.new_content.clone()),
189-
_ => {
190-
warn!("got m.room.message event with an edit without a valid m.replace relation");
191-
None
192-
}
193-
});
194-
195-
// We're not interested in aggregations for the latest preview item.
196-
let reactions = Default::default();
197-
let thread_root = None;
198-
let in_reply_to = None;
199-
let thread_summary = None;
200-
201-
let msglike = MsgLikeContent {
202-
kind: MsgLikeKind::Message(Message::from_event(
203-
event_content.msgtype,
204-
event_content.mentions,
205-
edit,
206-
RemoveReplyFallback::Yes,
207-
)),
208-
reactions,
209-
thread_root,
210-
in_reply_to,
211-
thread_summary,
212-
};
213-
214-
TimelineItemContent::MsgLike(msglike)
215-
}
216-
217-
SyncRoomMessageEvent::Redacted(_) => {
218-
TimelineItemContent::MsgLike(MsgLikeContent::redacted())
219-
}
220-
}
221-
}
222-
223-
fn from_suitable_latest_knock_state_event_content(
224-
event: &SyncRoomMemberEvent,
225-
) -> TimelineItemContent {
226-
match event {
227-
SyncRoomMemberEvent::Original(event) => {
228-
let content = event.content.clone();
229-
let prev_content = event.prev_content().cloned();
230-
TimelineItemContent::room_member(
231-
event.state_key.to_owned(),
232-
FullStateEventContent::Original { content, prev_content },
233-
event.sender.to_owned(),
234-
)
235-
}
236-
SyncRoomMemberEvent::Redacted(_) => {
237-
TimelineItemContent::MsgLike(MsgLikeContent::redacted())
238-
}
239-
}
240-
}
241-
242-
/// Given some sticker content that is from an event that we have already
243-
/// determined is suitable for use as a latest event in a message preview,
244-
/// extract its contents and wrap it as a `TimelineItemContent`.
245-
fn from_suitable_latest_sticker_content(event: &SyncStickerEvent) -> TimelineItemContent {
246-
match event {
247-
SyncStickerEvent::Original(event) => {
248-
// Grab the content of this event
249-
let event_content = event.content.clone();
250-
251-
// We're not interested in aggregations for the latest preview item.
252-
let reactions = Default::default();
253-
let thread_root = None;
254-
let in_reply_to = None;
255-
let thread_summary = None;
256-
257-
let msglike = MsgLikeContent {
258-
kind: MsgLikeKind::Sticker(Sticker { content: event_content }),
259-
reactions,
260-
thread_root,
261-
in_reply_to,
262-
thread_summary,
263-
};
264-
265-
TimelineItemContent::MsgLike(msglike)
266-
}
267-
SyncStickerEvent::Redacted(_) => {
268-
TimelineItemContent::MsgLike(MsgLikeContent::redacted())
269-
}
270-
}
271-
}
272-
273-
/// Extracts a `TimelineItemContent` from a poll start event for use as a
274-
/// latest event in a message preview.
275-
fn from_suitable_latest_poll_event_content(
276-
event: &SyncUnstablePollStartEvent,
277-
) -> TimelineItemContent {
278-
let SyncUnstablePollStartEvent::Original(event) = event else {
279-
return TimelineItemContent::MsgLike(MsgLikeContent::redacted());
280-
};
281-
282-
// Feed the bundled edit, if present, or we might miss showing edited content.
283-
let edit =
284-
event.unsigned.relations.replace.as_ref().and_then(|boxed| match &boxed.content {
285-
UnstablePollStartEventContent::Replacement(re) => {
286-
Some(re.relates_to.new_content.clone())
287-
}
288-
_ => {
289-
warn!("got poll event with an edit without a valid m.replace relation");
290-
None
291-
}
292-
});
293-
294-
let mut poll = PollState::new(NewUnstablePollStartEventContent::new(
295-
event.content.poll_start().clone(),
296-
));
297-
if let Some(edit) = edit {
298-
poll = poll.edit(edit).expect("the poll can't be ended yet!"); // TODO or can it?
299-
}
300-
301-
// We're not interested in aggregations for the latest preview item.
302-
let reactions = Default::default();
303-
let thread_root = None;
304-
let in_reply_to = None;
305-
let thread_summary = None;
306-
307-
let msglike = MsgLikeContent {
308-
kind: MsgLikeKind::Poll(poll),
309-
reactions,
310-
thread_root,
311-
in_reply_to,
312-
thread_summary,
313-
};
314-
315-
TimelineItemContent::MsgLike(msglike)
316-
}
317-
318-
fn from_suitable_latest_call_invite_content(
319-
event: &SyncCallInviteEvent,
320-
) -> TimelineItemContent {
321-
match event {
322-
SyncCallInviteEvent::Original(_) => TimelineItemContent::CallInvite,
323-
SyncCallInviteEvent::Redacted(_) => {
324-
TimelineItemContent::MsgLike(MsgLikeContent::redacted())
325-
}
326-
}
327-
}
328-
329-
fn from_suitable_latest_call_notify_content(
330-
event: &SyncCallNotifyEvent,
331-
) -> TimelineItemContent {
332-
match event {
333-
SyncCallNotifyEvent::Original(_) => TimelineItemContent::CallNotify,
334-
SyncCallNotifyEvent::Redacted(_) => {
335-
TimelineItemContent::MsgLike(MsgLikeContent::redacted())
336-
}
337-
}
338-
}
339-
340117
pub fn as_msglike(&self) -> Option<&MsgLikeContent> {
341118
as_variant!(self, TimelineItemContent::MsgLike)
342119
}

0 commit comments

Comments
 (0)