@@ -3,8 +3,8 @@ use std::sync::Arc;
3
3
use imbl:: Vector ;
4
4
use matrix_sdk:: ruma:: events:: room:: message:: MessageType ;
5
5
use matrix_sdk_ui:: timeline:: {
6
- MsgLikeContent , MsgLikeKind , TimelineItem , TimelineItemContent , TimelineItemKind ,
7
- VirtualTimelineItem ,
6
+ MembershipChange , MsgLikeContent , MsgLikeKind , TimelineItem , TimelineItemContent ,
7
+ TimelineItemKind , VirtualTimelineItem ,
8
8
} ;
9
9
use ratatui:: { prelude:: * , widgets:: * } ;
10
10
@@ -52,11 +52,51 @@ impl Widget for &mut TimelineView<'_> {
52
52
..
53
53
} ) => content. push ( format ! ( "{}: (UTD)" , sender) ) ,
54
54
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 removed from the room" ,
66
+ MembershipChange :: Invited => "has been invited to the room" ,
67
+ MembershipChange :: KickedAndBanned => {
68
+ "has been removed 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 retrackted 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
+
55
96
TimelineItemContent :: MsgLike ( MsgLikeContent {
56
97
kind : MsgLikeKind :: Sticker ( _) ,
57
98
..
58
99
} )
59
- | TimelineItemContent :: MembershipChange ( _)
60
100
| TimelineItemContent :: ProfileChange ( _)
61
101
| TimelineItemContent :: OtherState ( _)
62
102
| TimelineItemContent :: FailedToParseMessageLike { .. }
0 commit comments