@@ -22,6 +22,7 @@ import { GuestAccess, HistoryVisibility, JoinRule } from "matrix-js-sdk/src/@typ
2222import { EventType , MsgType } from "matrix-js-sdk/src/@types/event" ;
2323import { M_POLL_START , M_POLL_END } from "matrix-js-sdk/src/@types/polls" ;
2424import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent" ;
25+ import { MatrixClient } from "matrix-js-sdk/src/matrix" ;
2526
2627import { _t } from "./languageHandler" ;
2728import * as Roles from "./Roles" ;
@@ -31,7 +32,6 @@ import { ALL_RULE_TYPES, ROOM_RULE_TYPES, SERVER_RULE_TYPES, USER_RULE_TYPES } f
3132import { WIDGET_LAYOUT_EVENT_TYPE } from "./stores/widgets/WidgetLayoutStore" ;
3233import { RightPanelPhases } from "./stores/right-panel/RightPanelStorePhases" ;
3334import defaultDispatcher from "./dispatcher/dispatcher" ;
34- import { MatrixClientPeg } from "./MatrixClientPeg" ;
3535import { RoomSettingsTab } from "./components/views/dialogs/RoomSettingsDialog" ;
3636import AccessibleButton , { ButtonEvent } from "./components/views/elements/AccessibleButton" ;
3737import RightPanelStore from "./stores/right-panel/RightPanelStore" ;
@@ -40,16 +40,15 @@ import { ElementCall } from "./models/Call";
4040import { textForVoiceBroadcastStoppedEvent , VoiceBroadcastInfoEventType } from "./voice-broadcast" ;
4141import { getSenderName } from "./utils/event/getSenderName" ;
4242
43- function getRoomMemberDisplayname ( event : MatrixEvent , userId = event . getSender ( ) ) : string {
44- const client = MatrixClientPeg . get ( ) ;
43+ function getRoomMemberDisplayname ( client : MatrixClient , event : MatrixEvent , userId = event . getSender ( ) ) : string {
4544 const roomId = event . getRoomId ( ) ;
4645 const member = client . getRoom ( roomId ) ?. getMember ( userId ! ) ;
4746 return member ?. name || member ?. rawDisplayName || userId || _t ( "Someone" ) ;
4847}
4948
50- function textForCallEvent ( event : MatrixEvent ) : ( ) => string {
51- const roomName = MatrixClientPeg . get ( ) . getRoom ( event . getRoomId ( ) ! ) ?. name ;
52- const isSupported = MatrixClientPeg . get ( ) . supportsVoip ( ) ;
49+ function textForCallEvent ( event : MatrixEvent , client : MatrixClient ) : ( ) => string {
50+ const roomName = client . getRoom ( event . getRoomId ( ) ! ) ?. name ;
51+ const isSupported = client . supportsVoip ( ) ;
5352
5453 return isSupported
5554 ? ( ) => _t ( "Video call started in %(roomName)s." , { roomName } )
@@ -60,11 +59,11 @@ function textForCallEvent(event: MatrixEvent): () => string {
6059// any text to display at all. For this reason they return deferred values
6160// to avoid the expense of looking up translations when they're not needed.
6261
63- function textForCallInviteEvent ( event : MatrixEvent ) : ( ( ) => string ) | null {
62+ function textForCallInviteEvent ( event : MatrixEvent , client : MatrixClient ) : ( ( ) => string ) | null {
6463 const senderName = getSenderName ( event ) ;
6564 // FIXME: Find a better way to determine this from the event?
6665 const isVoice = ! event . getContent ( ) . offer ?. sdp ?. includes ( "m=video" ) ;
67- const isSupported = MatrixClientPeg . get ( ) . supportsVoip ( ) ;
66+ const isSupported = client . supportsVoip ( ) ;
6867
6968 // This ladder could be reduced down to a couple string variables, however other languages
7069 // can have a hard time translating those strings. In an effort to make translations easier
@@ -103,10 +102,15 @@ function getModification(prev?: string, value?: string): Modification {
103102 return Modification . None ;
104103}
105104
106- function textForMemberEvent ( ev : MatrixEvent , allowJSX : boolean , showHiddenEvents ?: boolean ) : ( ( ) => string ) | null {
105+ function textForMemberEvent (
106+ ev : MatrixEvent ,
107+ client : MatrixClient ,
108+ allowJSX : boolean ,
109+ showHiddenEvents ?: boolean ,
110+ ) : ( ( ) => string ) | null {
107111 // XXX: SYJS-16 "sender is sometimes null for join messages"
108- const senderName = ev . sender ?. name || getRoomMemberDisplayname ( ev ) ;
109- const targetName = ev . target ?. name || getRoomMemberDisplayname ( ev , ev . getStateKey ( ) ) ;
112+ const senderName = ev . sender ?. name || getRoomMemberDisplayname ( client , ev ) ;
113+ const targetName = ev . target ?. name || getRoomMemberDisplayname ( client , ev , ev . getStateKey ( ) ) ;
110114 const prevContent = ev . getPrevContent ( ) ;
111115 const content = ev . getContent ( ) ;
112116 const reason = content . reason ;
@@ -269,7 +273,7 @@ const onViewJoinRuleSettingsClick = (): void => {
269273 } ) ;
270274} ;
271275
272- function textForJoinRulesEvent ( ev : MatrixEvent , allowJSX : boolean ) : ( ) => Renderable {
276+ function textForJoinRulesEvent ( ev : MatrixEvent , client : MatrixClient , allowJSX : boolean ) : ( ) => Renderable {
273277 const senderDisplayName = ev . sender && ev . sender . name ? ev . sender . name : ev . getSender ( ) ;
274278 switch ( ev . getContent ( ) . join_rule ) {
275279 case JoinRule . Public :
@@ -361,7 +365,7 @@ function textForServerACLEvent(ev: MatrixEvent): (() => string) | null {
361365 return getText ;
362366}
363367
364- function textForMessageEvent ( ev : MatrixEvent ) : ( ( ) => string ) | null {
368+ function textForMessageEvent ( ev : MatrixEvent , client : MatrixClient ) : ( ( ) => string ) | null {
365369 if ( isLocationEvent ( ev ) ) {
366370 return textForLocationEvent ( ev ) ;
367371 }
@@ -370,7 +374,7 @@ function textForMessageEvent(ev: MatrixEvent): (() => string) | null {
370374 const senderDisplayName = ev . sender && ev . sender . name ? ev . sender . name : ev . getSender ( ) ;
371375 let message = ev . getContent ( ) . body ;
372376 if ( ev . isRedacted ( ) ) {
373- message = textForRedactedPollAndMessageEvent ( ev ) ;
377+ message = textForRedactedPollAndMessageEvent ( ev , client ) ;
374378 }
375379
376380 if ( ev . getContent ( ) . msgtype === MsgType . Emote ) {
@@ -496,7 +500,7 @@ function textForHistoryVisibilityEvent(event: MatrixEvent): (() => string) | nul
496500}
497501
498502// Currently will only display a change if a user's power level is changed
499- function textForPowerEvent ( event : MatrixEvent ) : ( ( ) => string ) | null {
503+ function textForPowerEvent ( event : MatrixEvent , client : MatrixClient ) : ( ( ) => string ) | null {
500504 const senderName = getSenderName ( event ) ;
501505 if ( ! event . getPrevContent ( ) ?. users || ! event . getContent ( ) ?. users ) {
502506 return null ;
@@ -533,7 +537,7 @@ function textForPowerEvent(event: MatrixEvent): (() => string) | null {
533537 return ;
534538 }
535539 if ( to !== from ) {
536- const name = getRoomMemberDisplayname ( event , userId ) ;
540+ const name = getRoomMemberDisplayname ( client , event , userId ) ;
537541 diffs . push ( { userId, name, from, to } ) ;
538542 }
539543 } ) ;
@@ -561,7 +565,7 @@ const onPinnedMessagesClick = (): void => {
561565 RightPanelStore . instance . setCard ( { phase : RightPanelPhases . PinnedMessages } , false ) ;
562566} ;
563567
564- function textForPinnedEvent ( event : MatrixEvent , allowJSX : boolean ) : ( ( ) => Renderable ) | null {
568+ function textForPinnedEvent ( event : MatrixEvent , client : MatrixClient , allowJSX : boolean ) : ( ( ) => Renderable ) | null {
565569 if ( ! SettingsStore . getValue ( "feature_pinning" ) ) return null ;
566570 const senderName = getSenderName ( event ) ;
567571 const roomId = event . getRoomId ( ) ! ;
@@ -835,12 +839,12 @@ export function textForLocationEvent(event: MatrixEvent): () => string {
835839 } ) ;
836840}
837841
838- function textForRedactedPollAndMessageEvent ( ev : MatrixEvent ) : string {
842+ function textForRedactedPollAndMessageEvent ( ev : MatrixEvent , client : MatrixClient ) : string {
839843 let message = _t ( "Message deleted" ) ;
840844 const unsigned = ev . getUnsigned ( ) ;
841845 const redactedBecauseUserId = unsigned ?. redacted_because ?. sender ;
842846 if ( redactedBecauseUserId && redactedBecauseUserId !== ev . getSender ( ) ) {
843- const room = MatrixClientPeg . get ( ) . getRoom ( ev . getRoomId ( ) ) ;
847+ const room = client . getRoom ( ev . getRoomId ( ) ) ;
844848 const sender = room ?. getMember ( redactedBecauseUserId ) ;
845849 message = _t ( "Message deleted by %(name)s" , {
846850 name : sender ?. name || redactedBecauseUserId ,
@@ -850,12 +854,12 @@ function textForRedactedPollAndMessageEvent(ev: MatrixEvent): string {
850854 return message ;
851855}
852856
853- function textForPollStartEvent ( event : MatrixEvent ) : ( ( ) => string ) | null {
857+ function textForPollStartEvent ( event : MatrixEvent , client : MatrixClient ) : ( ( ) => string ) | null {
854858 return ( ) => {
855859 let message = "" ;
856860
857861 if ( event . isRedacted ( ) ) {
858- message = textForRedactedPollAndMessageEvent ( event ) ;
862+ message = textForRedactedPollAndMessageEvent ( event , client ) ;
859863 const senderDisplayName = event . sender ?. name ?? event . getSender ( ) ;
860864 message = senderDisplayName + ": " + message ;
861865 } else {
@@ -879,7 +883,12 @@ function textForPollEndEvent(event: MatrixEvent): (() => string) | null {
879883type Renderable = string | React . ReactNode | null ;
880884
881885interface IHandlers {
882- [ type : string ] : ( ev : MatrixEvent , allowJSX : boolean , showHiddenEvents ?: boolean ) => ( ( ) => Renderable ) | null ;
886+ [ type : string ] : (
887+ ev : MatrixEvent ,
888+ client : MatrixClient ,
889+ allowJSX : boolean ,
890+ showHiddenEvents ?: boolean ,
891+ ) => ( ( ) => Renderable ) | null ;
883892}
884893
885894const handlers : IHandlers = {
@@ -925,25 +934,39 @@ for (const evType of ElementCall.CALL_EVENT_TYPE.names) {
925934
926935/**
927936 * Determines whether the given event has text to display.
937+ *
938+ * @param client The Matrix Client instance for the logged-in user
928939 * @param ev The event
929940 * @param showHiddenEvents An optional cached setting value for showHiddenEventsInTimeline
930941 * to avoid hitting the settings store
931942 */
932- export function hasText ( ev : MatrixEvent , showHiddenEvents ?: boolean ) : boolean {
943+ export function hasText ( ev : MatrixEvent , client : MatrixClient , showHiddenEvents ?: boolean ) : boolean {
933944 const handler = ( ev . isState ( ) ? stateHandlers : handlers ) [ ev . getType ( ) ] ;
934- return Boolean ( handler ?.( ev , false , showHiddenEvents ) ) ;
945+ return Boolean ( handler ?.( ev , client , false , showHiddenEvents ) ) ;
935946}
936947
937948/**
938949 * Gets the textual content of the given event.
950+ *
939951 * @param ev The event
952+ * @param client The Matrix Client instance for the logged-in user
940953 * @param allowJSX Whether to output rich JSX content
941954 * @param showHiddenEvents An optional cached setting value for showHiddenEventsInTimeline
942955 * to avoid hitting the settings store
943956 */
944- export function textForEvent ( ev : MatrixEvent ) : string ;
945- export function textForEvent ( ev : MatrixEvent , allowJSX : true , showHiddenEvents ?: boolean ) : string | React . ReactNode ;
946- export function textForEvent ( ev : MatrixEvent , allowJSX = false , showHiddenEvents ?: boolean ) : string | React . ReactNode {
957+ export function textForEvent ( ev : MatrixEvent , client : MatrixClient ) : string ;
958+ export function textForEvent (
959+ ev : MatrixEvent ,
960+ client : MatrixClient ,
961+ allowJSX : true ,
962+ showHiddenEvents ?: boolean ,
963+ ) : string | React . ReactNode ;
964+ export function textForEvent (
965+ ev : MatrixEvent ,
966+ client : MatrixClient ,
967+ allowJSX = false ,
968+ showHiddenEvents ?: boolean ,
969+ ) : string | React . ReactNode {
947970 const handler = ( ev . isState ( ) ? stateHandlers : handlers ) [ ev . getType ( ) ] ;
948- return handler ?.( ev , allowJSX , showHiddenEvents ) ?.( ) || "" ;
971+ return handler ?.( ev , client , allowJSX , showHiddenEvents ) ?.( ) || "" ;
949972}
0 commit comments