@@ -3,8 +3,8 @@ use std::sync::Arc;
33use imbl:: Vector ;
44use matrix_sdk:: ruma:: events:: room:: message:: MessageType ;
55use matrix_sdk_ui:: timeline:: {
6- MsgLikeContent , MsgLikeKind , TimelineItem , TimelineItemContent , TimelineItemKind ,
7- VirtualTimelineItem ,
6+ MembershipChange , MsgLikeContent , MsgLikeKind , TimelineItem , TimelineItemContent ,
7+ TimelineItemKind , VirtualTimelineItem ,
88} ;
99use ratatui:: { prelude:: * , widgets:: * } ;
1010
@@ -52,11 +52,51 @@ impl Widget for &mut TimelineView<'_> {
5252 ..
5353 } ) => content. push ( format ! ( "{}: (UTD)" , sender) ) ,
5454
55+ TimelineItemContent :: MembershipChange ( m) => {
56+ if let Some ( change) = m. change ( ) {
57+ let display_name =
58+ m. display_name ( ) . unwrap_or_else ( || m. user_id ( ) . to_string ( ) ) ;
59+
60+ let change = match change {
61+ MembershipChange :: Joined => "has joined the room" ,
62+ MembershipChange :: Left => "has left the room" ,
63+ MembershipChange :: Banned => "has been banned" ,
64+ MembershipChange :: Unbanned => "has been unbanned" ,
65+ MembershipChange :: Kicked => "has been kicked from the room" ,
66+ MembershipChange :: Invited => "has been invited to the room" ,
67+ MembershipChange :: KickedAndBanned => {
68+ "has been kicked and banned from the room"
69+ }
70+ MembershipChange :: InvitationAccepted => {
71+ "has accepted the invitation to the room"
72+ }
73+ MembershipChange :: InvitationRejected => {
74+ "has rejected the invitation to the room"
75+ }
76+ MembershipChange :: Knocked => "knocked on the room" ,
77+ MembershipChange :: KnockAccepted => {
78+ "has accepted a knock on the room"
79+ }
80+ MembershipChange :: KnockRetracted => {
81+ "has retracted a knock on the room"
82+ }
83+ MembershipChange :: KnockDenied => "has denied a knock" ,
84+ MembershipChange :: None
85+ | MembershipChange :: Error
86+ | MembershipChange :: InvitationRevoked
87+ | MembershipChange :: NotImplemented => {
88+ "has changed it's membership status"
89+ }
90+ } ;
91+
92+ content. push ( format ! ( "{display_name} {change}" ) ) ;
93+ }
94+ }
95+
5596 TimelineItemContent :: MsgLike ( MsgLikeContent {
5697 kind : MsgLikeKind :: Sticker ( _) ,
5798 ..
5899 } )
59- | TimelineItemContent :: MembershipChange ( _)
60100 | TimelineItemContent :: ProfileChange ( _)
61101 | TimelineItemContent :: OtherState ( _)
62102 | TimelineItemContent :: FailedToParseMessageLike { .. }
0 commit comments