Skip to content

Commit d5763a4

Browse files
committed
improve trait naming
1 parent 00b9d3a commit d5763a4

File tree

4 files changed

+59
-50
lines changed

4 files changed

+59
-50
lines changed

src/home/new_message_context_menu.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
use bitflags::bitflags;
55
use makepad_widgets::*;
66
use matrix_sdk::ruma::OwnedEventId;
7+
use matrix_sdk_ui::timeline::InReplyToDetails;
8+
use ruma::events::room::message::MessageType;
79

810
use crate::sliding_sync::UserPowerLevels;
911

10-
use super::room_screen::{Eventable, MessageAction, MessageOrSticker, MsgTypeAble};
12+
use super::room_screen::{MessageViewFromEvent, MessageAction, MessageOrSticker};
1113

1214
const BUTTON_HEIGHT: f64 = 35.0; // KEEP IN SYNC WITH BUTTON_HEIGHT BELOW
1315
const MENU_WIDTH: f64 = 215.0; // KEEP IN SYNC WITH MENU_WIDTH BELOW
@@ -246,7 +248,7 @@ bitflags! {
246248
}
247249
}
248250
impl MessageAbilities {
249-
pub fn from_user_power_and_event<T: Eventable, M: MsgTypeAble>(
251+
pub fn from_user_power_and_event<T: MessageViewFromEvent, M: ContextMenuFromEvent>(
250252
user_power_levels: &UserPowerLevels,
251253
event_tl_item: &T,
252254
_message: &MessageOrSticker<M>,
@@ -618,3 +620,9 @@ impl NewMessageContextMenuRef {
618620
inner.show(cx, details)
619621
}
620622
}
623+
pub trait ContextMenuFromEvent {
624+
fn msgtype(&self) -> &MessageType;
625+
fn body(&self) -> &str;
626+
fn in_reply_to(&self) -> Option<&InReplyToDetails>;
627+
fn is_searched_result(&self) -> bool;
628+
}

src/home/room_read_receipt.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use makepad_widgets::*;
77
use matrix_sdk::ruma::{events::receipt::Receipt, EventId, OwnedUserId, RoomId};
88
use std::cmp;
99

10-
use super::room_screen::Eventable;
10+
use super::room_screen::MessageViewFromEvent;
1111

1212

1313
/// The maximum number of items to display in the read receipts AvatarRow
@@ -226,7 +226,7 @@ impl AvatarRowRef {
226226
/// room ID, and an EventTimelineItem, this will populate the avatar
227227
/// row of the item with the read receipts of the event.
228228
///
229-
pub fn populate_read_receipts<T: Eventable>(
229+
pub fn populate_read_receipts<T: MessageViewFromEvent>(
230230
item: &WidgetRef,
231231
cx: &mut Cx,
232232
room_id: &RoomId,

src/home/room_screen.rs

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use crate::shared::mentionable_text_input::MentionableTextInputWidgetRefExt;
3636

3737
use rangemap::RangeSet;
3838

39-
use super::{editing_pane::{EditingPaneAction, EditingPaneWidgetExt}, event_reaction_list::ReactionData, loading_pane::LoadingPaneRef, location_preview::LocationPreviewWidgetExt, new_message_context_menu::{MessageAbilities, MessageDetails}, room_read_receipt::{self, populate_read_receipts, MAX_VISIBLE_AVATARS_IN_READ_RECEIPT}, rooms_list::RoomsListWidgetExt};
39+
use super::{editing_pane::{EditingPaneAction, EditingPaneWidgetExt}, event_reaction_list::ReactionData, loading_pane::LoadingPaneRef, location_preview::LocationPreviewWidgetExt, new_message_context_menu::{ContextMenuFromEvent, MessageAbilities, MessageDetails}, room_read_receipt::{self, populate_read_receipts, MAX_VISIBLE_AVATARS_IN_READ_RECEIPT}, rooms_list::RoomsListWidgetExt};
4040
use search_result::{handle_search_input, SearchResultWidgetExt};
4141
pub use search_result::SearchTimelineItem;
4242
const GEO_URI_SCHEME: &str = "geo:";
@@ -1319,12 +1319,12 @@ impl Widget for RoomScreen {
13191319
};
13201320
let (item, item_new_draw_status) = match timeline_item.kind() {
13211321
TimelineItemKind::Event(event_tl_item) => {
1322-
let event_tl_item_wrapper = &EventableWrapperETI(event_tl_item);
1322+
let event_tl_item_wrapper = &MessageViewFromEventWrapperETI(event_tl_item);
13231323
match event_tl_item.content() {
13241324
TimelineItemContent::Message(message) => {
13251325
let prev_event = tl_idx.checked_sub(1).and_then(|i| tl_items.get(i));
13261326
let prev_event = prev_event.map(PreviousWrapperTI);
1327-
let message = &MsgTypeWrapperTM(message);
1327+
let message = &MessageWrapperTM(message);
13281328
populate_message_view(
13291329
cx,
13301330
list,
@@ -1349,7 +1349,7 @@ impl Widget for RoomScreen {
13491349
item_id,
13501350
room_id,
13511351
event_tl_item_wrapper,
1352-
MessageOrSticker::Sticker::<MsgTypeWrapperTM>(sticker.content()),
1352+
MessageOrSticker::Sticker::<MessageWrapperTM>(sticker.content()),
13531353
prev_event.as_ref(),
13541354
&mut tl_state.media_cache,
13551355
&tl_state.user_power,
@@ -2965,11 +2965,11 @@ impl ItemDrawnStatus {
29652965
// Message(&'e timeline::Message),
29662966
// Sticker(&'e StickerEventContent),
29672967
// }
2968-
pub enum MessageOrSticker<'e, T:MsgTypeAble> {
2968+
pub enum MessageOrSticker<'e, T:ContextMenuFromEvent> {
29692969
Message(&'e T),
29702970
Sticker(&'e StickerEventContent),
29712971
}
2972-
impl <T> MessageOrSticker<'_, T> where T:MsgTypeAble{
2972+
impl <T> MessageOrSticker<'_, T> where T:ContextMenuFromEvent{
29732973
/// Returns the type of this message or sticker.
29742974
pub fn get_type(&self) -> MessageOrStickerType {
29752975
match self {
@@ -3017,15 +3017,10 @@ impl <T> MessageOrSticker<'_, T> where T:MsgTypeAble{
30173017
}
30183018
}
30193019

3020-
pub trait MsgTypeAble {
3021-
fn msgtype(&self) -> &MessageType;
3022-
fn body(&self) -> &str;
3023-
fn in_reply_to(&self) -> Option<&InReplyToDetails>;
3024-
fn is_searched_result(&self) -> bool;
3025-
}
3026-
pub struct MsgTypeWrapperTM<'a>(pub &'a timeline::Message);
3020+
/// A wrapper around a [`timeline::Message`] that implements [`ContextMenuFromEvent`].
3021+
pub struct MessageWrapperTM<'a>(pub &'a timeline::Message);
30273022

3028-
impl MsgTypeAble for MsgTypeWrapperTM<'_> {
3023+
impl ContextMenuFromEvent for MessageWrapperTM<'_> {
30293024
fn msgtype(&self) -> &MessageType {
30303025
self.0.msgtype()
30313026
}
@@ -3102,7 +3097,8 @@ impl MessageOrStickerType<'_> {
31023097
}
31033098
}
31043099
}
3105-
pub trait Eventable {
3100+
/// Trait for populating messages in the timeline.
3101+
pub trait MessageViewFromEvent {
31063102
fn timestamp(&self) -> MilliSecondsSinceUnixEpoch;
31073103
fn event_id(&self) -> Option<&EventId>;
31083104
fn sender(&self) -> &UserId;
@@ -3117,8 +3113,9 @@ pub trait Eventable {
31173113
fn room_id(&self) -> Option<&ruma::RoomId>;
31183114
}
31193115

3120-
pub struct EventableWrapperETI<'a>(pub &'a EventTimelineItem);
3121-
impl Eventable for EventableWrapperETI<'_> {
3116+
/// A wrapper around a [`EventTimelineItem`] that implements [`MessageViewFromEvent`].
3117+
pub struct MessageViewFromEventWrapperETI<'a>(pub &'a EventTimelineItem);
3118+
impl MessageViewFromEvent for MessageViewFromEventWrapperETI<'_> {
31223119
fn timestamp(&self) -> MilliSecondsSinceUnixEpoch {
31233120
self.0.timestamp()
31243121
}
@@ -3157,13 +3154,13 @@ impl Eventable for EventableWrapperETI<'_> {
31573154
}
31583155
}
31593156

3160-
pub trait PreviousEventable<T:Eventable> {
3157+
pub trait PreviousMessageViewFromEvent<T:MessageViewFromEvent> {
31613158
fn use_compact(&self, current: &T) -> bool;
31623159
}
31633160

31643161
pub struct PreviousWrapperTI<'a>(pub &'a Arc<TimelineItem>);
3165-
impl <'a> PreviousEventable<EventableWrapperETI<'a>> for PreviousWrapperTI<'a,> {
3166-
fn use_compact(&self, current: &EventableWrapperETI<'a>) -> bool {
3162+
impl <'a> PreviousMessageViewFromEvent<MessageViewFromEventWrapperETI<'a>> for PreviousWrapperTI<'a,> {
3163+
fn use_compact(&self, current: &MessageViewFromEventWrapperETI<'a>) -> bool {
31673164
let prev_event = Some(self.0);
31683165
let use_compact_view = match prev_event.map(|p| p.kind()) {
31693166
Some(TimelineItemKind::Event(prev_event_tl_item)) => match prev_event_tl_item.content() {
@@ -3201,7 +3198,7 @@ pub fn populate_message_view<T,P,M>(
32013198
is_contextual: bool,
32023199
item_drawn_status: ItemDrawnStatus,
32033200
room_screen_widget_uid: WidgetUid,
3204-
) -> (WidgetRef, ItemDrawnStatus) where T: Eventable, P: PreviousEventable<T>, M: MsgTypeAble {
3201+
) -> (WidgetRef, ItemDrawnStatus) where T: MessageViewFromEvent, P: PreviousMessageViewFromEvent<T>, M: ContextMenuFromEvent {
32053202
let mut new_drawn_status = item_drawn_status;
32063203
let ts_millis = event_tl_item.timestamp();
32073204

@@ -4071,7 +4068,7 @@ fn populate_preview_of_timeline_item(
40714068

40724069
/// A trait for abstracting over the different types of timeline events
40734070
/// that can be displayed in a `SmallStateEvent` widget.
4074-
pub trait SmallStateEventContent<T:Eventable> {
4071+
pub trait SmallStateEventContent<T:MessageViewFromEvent> {
40754072
/// Populates the *content* (not the profile) of the given `item` with data from
40764073
/// the given `event_tl_item` and `self` (the specific type of event content).
40774074
///
@@ -4102,14 +4099,14 @@ pub trait SmallStateEventContent<T:Eventable> {
41024099
/// An empty marker struct used for populating redacted messages.
41034100
struct RedactedMessageEventMarker;
41044101

4105-
impl SmallStateEventContent<EventableWrapperETI<'_>> for RedactedMessageEventMarker {
4102+
impl SmallStateEventContent<MessageViewFromEventWrapperETI<'_>> for RedactedMessageEventMarker {
41064103
fn populate_item_content(
41074104
&self,
41084105
cx: &mut Cx,
41094106
_list: &mut PortalList,
41104107
_item_id: usize,
41114108
item: WidgetRef,
4112-
event_tl_item: &EventableWrapperETI,
4109+
event_tl_item: &MessageViewFromEventWrapperETI,
41134110
original_sender: &str,
41144111
_item_drawn_status: ItemDrawnStatus,
41154112
mut new_drawn_status: ItemDrawnStatus,
@@ -4124,14 +4121,14 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for RedactedMessageEventMar
41244121
}
41254122
}
41264123

4127-
impl SmallStateEventContent<EventableWrapperETI<'_>> for timeline::OtherState {
4124+
impl SmallStateEventContent<MessageViewFromEventWrapperETI<'_>> for timeline::OtherState {
41284125
fn populate_item_content(
41294126
&self,
41304127
cx: &mut Cx,
41314128
list: &mut PortalList,
41324129
item_id: usize,
41334130
item: WidgetRef,
4134-
_event_tl_item: &EventableWrapperETI,
4131+
_event_tl_item: &MessageViewFromEventWrapperETI,
41354132
username: &str,
41364133
_item_drawn_status: ItemDrawnStatus,
41374134
mut new_drawn_status: ItemDrawnStatus,
@@ -4150,14 +4147,14 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for timeline::OtherState {
41504147
}
41514148
}
41524149

4153-
impl SmallStateEventContent<EventableWrapperETI<'_>> for MemberProfileChange {
4150+
impl SmallStateEventContent<MessageViewFromEventWrapperETI<'_>> for MemberProfileChange {
41544151
fn populate_item_content(
41554152
&self,
41564153
cx: &mut Cx,
41574154
_list: &mut PortalList,
41584155
_item_id: usize,
41594156
item: WidgetRef,
4160-
_event_tl_item: &EventableWrapperETI,
4157+
_event_tl_item: &MessageViewFromEventWrapperETI,
41614158
username: &str,
41624159
_item_drawn_status: ItemDrawnStatus,
41634160
mut new_drawn_status: ItemDrawnStatus,
@@ -4172,14 +4169,14 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for MemberProfileChange {
41724169
}
41734170
}
41744171

4175-
impl SmallStateEventContent<EventableWrapperETI<'_>> for RoomMembershipChange {
4172+
impl SmallStateEventContent<MessageViewFromEventWrapperETI<'_>> for RoomMembershipChange {
41764173
fn populate_item_content(
41774174
&self,
41784175
cx: &mut Cx,
41794176
list: &mut PortalList,
41804177
item_id: usize,
41814178
item: WidgetRef,
4182-
_event_tl_item: &EventableWrapperETI,
4179+
_event_tl_item: &MessageViewFromEventWrapperETI,
41834180
username: &str,
41844181
_item_drawn_status: ItemDrawnStatus,
41854182
mut new_drawn_status: ItemDrawnStatus,
@@ -4205,7 +4202,7 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for RoomMembershipChange {
42054202
///
42064203
/// The content of the returned widget is populated with data from the
42074204
/// given room membership change and its parent `EventTimelineItem`.
4208-
pub fn populate_small_state_event<T: Eventable>(
4205+
pub fn populate_small_state_event<T: MessageViewFromEvent>(
42094206
cx: &mut Cx,
42104207
list: &mut PortalList,
42114208
item_id: usize,
@@ -4284,7 +4281,7 @@ pub fn set_timestamp(
42844281
}
42854282

42864283
/// Returns the display name of the sender of the given `event_tl_item`, if available.
4287-
fn get_profile_display_name<T: Eventable>(event_tl_item: &T) -> Option<String> {
4284+
fn get_profile_display_name<T: MessageViewFromEvent>(event_tl_item: &T) -> Option<String> {
42884285
if let Some(TimelineDetails::Ready(profile)) = event_tl_item.sender_profile() {
42894286
profile.display_name.clone()
42904287
} else {

src/home/room_search_result.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use ruma::{events::{receipt::Receipt, room::message::{AudioMessageEventContent,
77

88
use crate::{app::AppState, event_preview::text_preview_of_other_state, shared::room_filter_input_bar::RoomFilterAction, sliding_sync::{current_user_id, submit_async_request, MatrixRequest}, utils::unix_time_millis_to_datetime};
99

10-
use crate::home::{new_message_context_menu::MessageDetails, room_screen::{populate_message_view, populate_small_state_event, Eventable, ItemDrawnStatus, MessageAction, MessageOrSticker, MsgTypeAble, PreviousEventable, RoomScreen, SmallStateEventContent, TimelineUiState}, rooms_list::RoomsListWidgetExt};
10+
use crate::home::{new_message_context_menu::MessageDetails, room_screen::{populate_message_view, populate_small_state_event, MessageViewFromEvent, ItemDrawnStatus, MessageAction, MessageOrSticker, ContextMenuFromEvent, PreviousMessageViewFromEvent, RoomScreen, SmallStateEventContent, TimelineUiState}, rooms_list::RoomsListWidgetExt};
1111

1212
live_design! {
1313
use link::theme::*;
@@ -368,10 +368,10 @@ pub fn search_result_draw_walk(room_screen: &mut RoomScreen, cx: &mut Cx2d, scop
368368
text.formatted = Some(FormattedBody::html(formated_string));
369369
}
370370
}
371-
let event = &EventableWrapperAEI(event, &tl_state.search_result_state.profiles_info);
371+
let event = &MessageViewFromEventWrapperAEI(event, &tl_state.search_result_state.profiles_info);
372372
// Do not use compact view if previous event is state
373373
let prev_event = prev_event.and_then(|f| if matches!(f, AnyTimelineEvent::State(_)) { None } else { Some(f) }).map(PreviousWrapperAEI);
374-
let message = MsgTypeWrapperRMC(&message, in_reply_to_details.as_ref());
374+
let message = MessageWrapperRMC(&message, in_reply_to_details.as_ref());
375375
populate_message_view(
376376
cx,
377377
list,
@@ -388,7 +388,7 @@ pub fn search_result_draw_walk(room_screen: &mut RoomScreen, cx: &mut Cx2d, scop
388388
)
389389
}
390390
Some(AnyMessageLikeEventContent::Sticker(sticker)) => {
391-
let event = &EventableWrapperAEI(event, &tl_state.search_result_state.profiles_info);
391+
let event = &MessageViewFromEventWrapperAEI(event, &tl_state.search_result_state.profiles_info);
392392
let prev_event = prev_event.map(PreviousWrapperAEI);
393393
let is_contextual = matches!(&current_item, SearchTimelineItem::ContextEvent(_));
394394
populate_message_view(
@@ -397,7 +397,7 @@ pub fn search_result_draw_walk(room_screen: &mut RoomScreen, cx: &mut Cx2d, scop
397397
item_id,
398398
room_id,
399399
event,
400-
MessageOrSticker::Sticker::<MsgTypeWrapperRMC>(&sticker),
400+
MessageOrSticker::Sticker::<MessageWrapperRMC>(&sticker),
401401
prev_event.as_ref(),
402402
&mut tl_state.media_cache,
403403
&tl_state.user_power,
@@ -416,7 +416,7 @@ pub fn search_result_draw_walk(room_screen: &mut RoomScreen, cx: &mut Cx2d, scop
416416
let state_key = state.state_key();
417417
if let Some(content) = state.original_content() {
418418
let wrapper = AnyStateEventContentWrapper(&content, state_key);
419-
let event = &EventableWrapperAEI(event, &tl_state.search_result_state.profiles_info);
419+
let event = &MessageViewFromEventWrapperAEI(event, &tl_state.search_result_state.profiles_info);
420420
populate_small_state_event(
421421
cx,
422422
list,
@@ -710,9 +710,11 @@ impl <'a>From<&AnyStateEventContentWrapper<'a>> for Option<AnyOtherFullStateEven
710710
}
711711
}
712712
}
713-
pub struct EventableWrapperAEI<'a>(pub &'a AnyTimelineEvent, pub &'a BTreeMap<OwnedUserId, TimelineDetails<Profile>>);
714713

715-
impl Eventable for EventableWrapperAEI<'_> {
714+
/// Wrapper for AnyTimelineEvent that implements `MessageViewFromEvent` trait.
715+
pub struct MessageViewFromEventWrapperAEI<'a>(pub &'a AnyTimelineEvent, pub &'a BTreeMap<OwnedUserId, TimelineDetails<Profile>>);
716+
717+
impl MessageViewFromEvent for MessageViewFromEventWrapperAEI<'_> {
716718
fn timestamp(&self) -> MilliSecondsSinceUnixEpoch {
717719
self.0.origin_server_ts()
718720
}
@@ -782,14 +784,14 @@ impl Eventable for EventableWrapperAEI<'_> {
782784
}
783785

784786

785-
impl SmallStateEventContent<EventableWrapperAEI<'_>> for AnyStateEventContentWrapper<'_> {
787+
impl SmallStateEventContent<MessageViewFromEventWrapperAEI<'_>> for AnyStateEventContentWrapper<'_> {
786788
fn populate_item_content(
787789
&self,
788790
cx: &mut Cx,
789791
list: &mut PortalList,
790792
item_id: usize,
791793
item: WidgetRef,
792-
_event_tl_item: &EventableWrapperAEI,
794+
_event_tl_item: &MessageViewFromEventWrapperAEI,
793795
username: &str,
794796
_item_drawn_status: ItemDrawnStatus,
795797
mut new_drawn_status: ItemDrawnStatus,
@@ -809,9 +811,10 @@ impl SmallStateEventContent<EventableWrapperAEI<'_>> for AnyStateEventContentWra
809811
}
810812
}
811813

814+
/// A wrapper for the `AnyTimelineEvent` that implements `PreviousMessageViewFromEvent` trait for compact view.
812815
pub struct PreviousWrapperAEI<'a>(pub &'a AnyTimelineEvent);
813-
impl <'a> PreviousEventable<EventableWrapperAEI<'a>> for PreviousWrapperAEI<'a> {
814-
fn use_compact(&self, current: &EventableWrapperAEI<'a>) -> bool {
816+
impl <'a> PreviousMessageViewFromEvent<MessageViewFromEventWrapperAEI<'a>> for PreviousWrapperAEI<'a> {
817+
fn use_compact(&self, current: &MessageViewFromEventWrapperAEI<'a>) -> bool {
815818
let prev_msg_sender = self.0.sender();
816819
let current_sender = current.0.sender();
817820
{
@@ -821,8 +824,9 @@ impl <'a> PreviousEventable<EventableWrapperAEI<'a>> for PreviousWrapperAEI<'a>
821824
}
822825
}
823826

824-
pub struct MsgTypeWrapperRMC<'a>(pub &'a RoomMessageEventContent, pub Option<&'a InReplyToDetails>);
825-
impl MsgTypeAble for MsgTypeWrapperRMC<'_> {
827+
/// A wrapper for the `RoomMessageEventContent` and `InReplyToDetails` that implements `ContextMenuFromEvent` trait.
828+
pub struct MessageWrapperRMC<'a>(pub &'a RoomMessageEventContent, pub Option<&'a InReplyToDetails>);
829+
impl ContextMenuFromEvent for MessageWrapperRMC<'_> {
826830
fn msgtype(&self) -> &MessageType {
827831
&self.0.msgtype
828832
}

0 commit comments

Comments
 (0)