@@ -36,7 +36,7 @@ use crate::shared::mentionable_text_input::MentionableTextInputWidgetRefExt;
36
36
37
37
use rangemap:: RangeSet ;
38
38
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 } ;
40
40
use search_result:: { handle_search_input, SearchResultWidgetExt } ;
41
41
pub use search_result:: SearchTimelineItem ;
42
42
const GEO_URI_SCHEME : & str = "geo:" ;
@@ -1319,12 +1319,12 @@ impl Widget for RoomScreen {
1319
1319
} ;
1320
1320
let ( item, item_new_draw_status) = match timeline_item. kind ( ) {
1321
1321
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) ;
1323
1323
match event_tl_item. content ( ) {
1324
1324
TimelineItemContent :: Message ( message) => {
1325
1325
let prev_event = tl_idx. checked_sub ( 1 ) . and_then ( |i| tl_items. get ( i) ) ;
1326
1326
let prev_event = prev_event. map ( PreviousWrapperTI ) ;
1327
- let message = & MsgTypeWrapperTM ( message) ;
1327
+ let message = & MessageWrapperTM ( message) ;
1328
1328
populate_message_view (
1329
1329
cx,
1330
1330
list,
@@ -1349,7 +1349,7 @@ impl Widget for RoomScreen {
1349
1349
item_id,
1350
1350
room_id,
1351
1351
event_tl_item_wrapper,
1352
- MessageOrSticker :: Sticker :: < MsgTypeWrapperTM > ( sticker. content ( ) ) ,
1352
+ MessageOrSticker :: Sticker :: < MessageWrapperTM > ( sticker. content ( ) ) ,
1353
1353
prev_event. as_ref ( ) ,
1354
1354
& mut tl_state. media_cache ,
1355
1355
& tl_state. user_power ,
@@ -2965,11 +2965,11 @@ impl ItemDrawnStatus {
2965
2965
// Message(&'e timeline::Message),
2966
2966
// Sticker(&'e StickerEventContent),
2967
2967
// }
2968
- pub enum MessageOrSticker < ' e , T : MsgTypeAble > {
2968
+ pub enum MessageOrSticker < ' e , T : ContextMenuFromEvent > {
2969
2969
Message ( & ' e T ) ,
2970
2970
Sticker ( & ' e StickerEventContent ) ,
2971
2971
}
2972
- impl < T > MessageOrSticker < ' _ , T > where T : MsgTypeAble {
2972
+ impl < T > MessageOrSticker < ' _ , T > where T : ContextMenuFromEvent {
2973
2973
/// Returns the type of this message or sticker.
2974
2974
pub fn get_type ( & self ) -> MessageOrStickerType {
2975
2975
match self {
@@ -3017,15 +3017,10 @@ impl <T> MessageOrSticker<'_, T> where T:MsgTypeAble{
3017
3017
}
3018
3018
}
3019
3019
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 ) ;
3027
3022
3028
- impl MsgTypeAble for MsgTypeWrapperTM < ' _ > {
3023
+ impl ContextMenuFromEvent for MessageWrapperTM < ' _ > {
3029
3024
fn msgtype ( & self ) -> & MessageType {
3030
3025
self . 0 . msgtype ( )
3031
3026
}
@@ -3102,7 +3097,8 @@ impl MessageOrStickerType<'_> {
3102
3097
}
3103
3098
}
3104
3099
}
3105
- pub trait Eventable {
3100
+ /// Trait for populating messages in the timeline.
3101
+ pub trait MessageViewFromEvent {
3106
3102
fn timestamp ( & self ) -> MilliSecondsSinceUnixEpoch ;
3107
3103
fn event_id ( & self ) -> Option < & EventId > ;
3108
3104
fn sender ( & self ) -> & UserId ;
@@ -3117,8 +3113,9 @@ pub trait Eventable {
3117
3113
fn room_id ( & self ) -> Option < & ruma:: RoomId > ;
3118
3114
}
3119
3115
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 < ' _ > {
3122
3119
fn timestamp ( & self ) -> MilliSecondsSinceUnixEpoch {
3123
3120
self . 0 . timestamp ( )
3124
3121
}
@@ -3157,13 +3154,13 @@ impl Eventable for EventableWrapperETI<'_> {
3157
3154
}
3158
3155
}
3159
3156
3160
- pub trait PreviousEventable < T : Eventable > {
3157
+ pub trait PreviousMessageViewFromEvent < T : MessageViewFromEvent > {
3161
3158
fn use_compact ( & self , current : & T ) -> bool ;
3162
3159
}
3163
3160
3164
3161
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 {
3167
3164
let prev_event = Some ( self . 0 ) ;
3168
3165
let use_compact_view = match prev_event. map ( |p| p. kind ( ) ) {
3169
3166
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>(
3201
3198
is_contextual : bool ,
3202
3199
item_drawn_status : ItemDrawnStatus ,
3203
3200
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 {
3205
3202
let mut new_drawn_status = item_drawn_status;
3206
3203
let ts_millis = event_tl_item. timestamp ( ) ;
3207
3204
@@ -4071,7 +4068,7 @@ fn populate_preview_of_timeline_item(
4071
4068
4072
4069
/// A trait for abstracting over the different types of timeline events
4073
4070
/// that can be displayed in a `SmallStateEvent` widget.
4074
- pub trait SmallStateEventContent < T : Eventable > {
4071
+ pub trait SmallStateEventContent < T : MessageViewFromEvent > {
4075
4072
/// Populates the *content* (not the profile) of the given `item` with data from
4076
4073
/// the given `event_tl_item` and `self` (the specific type of event content).
4077
4074
///
@@ -4102,14 +4099,14 @@ pub trait SmallStateEventContent<T:Eventable> {
4102
4099
/// An empty marker struct used for populating redacted messages.
4103
4100
struct RedactedMessageEventMarker ;
4104
4101
4105
- impl SmallStateEventContent < EventableWrapperETI < ' _ > > for RedactedMessageEventMarker {
4102
+ impl SmallStateEventContent < MessageViewFromEventWrapperETI < ' _ > > for RedactedMessageEventMarker {
4106
4103
fn populate_item_content (
4107
4104
& self ,
4108
4105
cx : & mut Cx ,
4109
4106
_list : & mut PortalList ,
4110
4107
_item_id : usize ,
4111
4108
item : WidgetRef ,
4112
- event_tl_item : & EventableWrapperETI ,
4109
+ event_tl_item : & MessageViewFromEventWrapperETI ,
4113
4110
original_sender : & str ,
4114
4111
_item_drawn_status : ItemDrawnStatus ,
4115
4112
mut new_drawn_status : ItemDrawnStatus ,
@@ -4124,14 +4121,14 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for RedactedMessageEventMar
4124
4121
}
4125
4122
}
4126
4123
4127
- impl SmallStateEventContent < EventableWrapperETI < ' _ > > for timeline:: OtherState {
4124
+ impl SmallStateEventContent < MessageViewFromEventWrapperETI < ' _ > > for timeline:: OtherState {
4128
4125
fn populate_item_content (
4129
4126
& self ,
4130
4127
cx : & mut Cx ,
4131
4128
list : & mut PortalList ,
4132
4129
item_id : usize ,
4133
4130
item : WidgetRef ,
4134
- _event_tl_item : & EventableWrapperETI ,
4131
+ _event_tl_item : & MessageViewFromEventWrapperETI ,
4135
4132
username : & str ,
4136
4133
_item_drawn_status : ItemDrawnStatus ,
4137
4134
mut new_drawn_status : ItemDrawnStatus ,
@@ -4150,14 +4147,14 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for timeline::OtherState {
4150
4147
}
4151
4148
}
4152
4149
4153
- impl SmallStateEventContent < EventableWrapperETI < ' _ > > for MemberProfileChange {
4150
+ impl SmallStateEventContent < MessageViewFromEventWrapperETI < ' _ > > for MemberProfileChange {
4154
4151
fn populate_item_content (
4155
4152
& self ,
4156
4153
cx : & mut Cx ,
4157
4154
_list : & mut PortalList ,
4158
4155
_item_id : usize ,
4159
4156
item : WidgetRef ,
4160
- _event_tl_item : & EventableWrapperETI ,
4157
+ _event_tl_item : & MessageViewFromEventWrapperETI ,
4161
4158
username : & str ,
4162
4159
_item_drawn_status : ItemDrawnStatus ,
4163
4160
mut new_drawn_status : ItemDrawnStatus ,
@@ -4172,14 +4169,14 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for MemberProfileChange {
4172
4169
}
4173
4170
}
4174
4171
4175
- impl SmallStateEventContent < EventableWrapperETI < ' _ > > for RoomMembershipChange {
4172
+ impl SmallStateEventContent < MessageViewFromEventWrapperETI < ' _ > > for RoomMembershipChange {
4176
4173
fn populate_item_content (
4177
4174
& self ,
4178
4175
cx : & mut Cx ,
4179
4176
list : & mut PortalList ,
4180
4177
item_id : usize ,
4181
4178
item : WidgetRef ,
4182
- _event_tl_item : & EventableWrapperETI ,
4179
+ _event_tl_item : & MessageViewFromEventWrapperETI ,
4183
4180
username : & str ,
4184
4181
_item_drawn_status : ItemDrawnStatus ,
4185
4182
mut new_drawn_status : ItemDrawnStatus ,
@@ -4205,7 +4202,7 @@ impl SmallStateEventContent<EventableWrapperETI<'_>> for RoomMembershipChange {
4205
4202
///
4206
4203
/// The content of the returned widget is populated with data from the
4207
4204
/// 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 > (
4209
4206
cx : & mut Cx ,
4210
4207
list : & mut PortalList ,
4211
4208
item_id : usize ,
@@ -4284,7 +4281,7 @@ pub fn set_timestamp(
4284
4281
}
4285
4282
4286
4283
/// 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 > {
4288
4285
if let Some ( TimelineDetails :: Ready ( profile) ) = event_tl_item. sender_profile ( ) {
4289
4286
profile. display_name . clone ( )
4290
4287
} else {
0 commit comments