@@ -36,7 +36,7 @@ use crate::shared::mentionable_text_input::MentionableTextInputWidgetRefExt;
3636
3737use 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 } ;
4040use search_result:: { handle_search_input, SearchResultWidgetExt } ;
4141pub use search_result:: SearchTimelineItem ;
4242const 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
31643161pub 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.
41034100struct 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 {
0 commit comments