From 00cb2927811043bd31e0b9cef3057ea49e66e758 Mon Sep 17 00:00:00 2001 From: Philipp Grieshofer Date: Mon, 13 Mar 2023 15:49:05 +0000 Subject: [PATCH] fix: Use MatrixLocalizations to calculate fallback user displayname --- lib/src/event.dart | 8 +- lib/src/room.dart | 8 +- lib/src/user.dart | 10 +-- lib/src/utils/event_localizations.dart | 81 ++++++++++--------- .../utils/matrix_default_localizations.dart | 3 + lib/src/utils/matrix_localizations.dart | 2 + 6 files changed, 59 insertions(+), 53 deletions(-) diff --git a/lib/src/event.dart b/lib/src/event.dart index b9555059..d5be1222 100644 --- a/lib/src/event.dart +++ b/lib/src/event.dart @@ -702,9 +702,9 @@ class Event extends MatrixEvent { bool plaintextBody = false, bool removeMarkdown = false}) { if (redacted) { - return i18n.removedBy( - (redactedBecause?.senderFromMemoryOrFallback)?.calcDisplayname() ?? - senderId); + return i18n.removedBy((redactedBecause?.senderFromMemoryOrFallback) + ?.calcDisplayname(i18n: i18n) ?? + senderId); } var body = plaintextBody ? this.plaintextBody : this.body; @@ -759,7 +759,7 @@ class Event extends MatrixEvent { textOnlyMessageTypes.contains(messageType)) { final senderNameOrYou = senderId == room.client.userID ? i18n.you - : senderFromMemoryOrFallback.calcDisplayname(); + : senderFromMemoryOrFallback.calcDisplayname(i18n: i18n); localizedBody = '$senderNameOrYou: $localizedBody'; } diff --git a/lib/src/room.dart b/lib/src/room.dart index 8db8879b..7a84b6bc 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -253,8 +253,8 @@ class Room { if (heroes.isNotEmpty) { final result = heroes .where((hero) => hero.isNotEmpty) - .map((hero) => - unsafeGetUserFromMemoryOrFallback(hero).calcDisplayname()) + .map((hero) => unsafeGetUserFromMemoryOrFallback(hero) + .calcDisplayname(i18n: i18n)) .join(', '); if (isAbandonedDMRoom) { return i18n.wasDirectChatDisplayName(result); @@ -265,7 +265,7 @@ class Room { if (membership == Membership.invite) { final sender = getState(EventTypes.RoomMember, client.userID!) ?.senderFromMemoryOrFallback - .calcDisplayname(); + .calcDisplayname(i18n: i18n); if (sender != null) return sender; } if (membership == Membership.leave) { @@ -273,7 +273,7 @@ class Room { if (invitation != null && invitation.unsigned?['prev_sender'] != null) { final name = unsafeGetUserFromMemoryOrFallback( invitation.unsigned?['prev_sender']) - .calcDisplayname(); + .calcDisplayname(i18n: i18n); return i18n.wasDirectChatDisplayName(name); } } diff --git a/lib/src/user.dart b/lib/src/user.dart index 473f47f8..d074ab2c 100644 --- a/lib/src/user.dart +++ b/lib/src/user.dart @@ -105,10 +105,10 @@ class User extends Event { /// the first character of each word becomes uppercase. /// If [mxidLocalPartFallback] is true, then the local part of the mxid will be shown /// if there is no other displayname available. If not then this will return "Unknown user". - String calcDisplayname({ - bool? formatLocalpart, - bool? mxidLocalPartFallback, - }) { + String calcDisplayname( + {bool? formatLocalpart, + bool? mxidLocalPartFallback, + MatrixLocalizations i18n = const MatrixDefaultLocalizations()}) { formatLocalpart ??= room.client.formatLocalpart; mxidLocalPartFallback ??= room.client.mxidLocalPartFallback; final displayName = this.displayName; @@ -128,7 +128,7 @@ class User extends Event { } return words.join(' ').trim(); } - return 'Unknown user'; + return i18n.unknownUser; } /// Call the Matrix API to kick this user from this room. diff --git a/lib/src/utils/event_localizations.dart b/lib/src/utils/event_localizations.dart index 135d0875..c39287d7 100644 --- a/lib/src/utils/event_localizations.dart +++ b/lib/src/utils/event_localizations.dart @@ -31,23 +31,23 @@ abstract class EventLocalizations { Event event, MatrixLocalizations i18n, String body) { switch (event.messageType) { case MessageTypes.Image: - return i18n - .sentAPicture(event.senderFromMemoryOrFallback.calcDisplayname()); + return i18n.sentAPicture( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); case MessageTypes.File: - return i18n - .sentAFile(event.senderFromMemoryOrFallback.calcDisplayname()); + return i18n.sentAFile( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); case MessageTypes.Audio: - return i18n - .sentAnAudio(event.senderFromMemoryOrFallback.calcDisplayname()); + return i18n.sentAnAudio( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); case MessageTypes.Video: - return i18n - .sentAVideo(event.senderFromMemoryOrFallback.calcDisplayname()); + return i18n.sentAVideo( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); case MessageTypes.Location: return i18n.sharedTheLocation( - event.senderFromMemoryOrFallback.calcDisplayname()); + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); case MessageTypes.Sticker: - return i18n - .sentASticker(event.senderFromMemoryOrFallback.calcDisplayname()); + return i18n.sentASticker( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); case MessageTypes.Emote: return '* $body'; case MessageTypes.BadEncrypted: @@ -83,17 +83,17 @@ abstract class EventLocalizations { static final Map localizationsMap = { - EventTypes.Sticker: (event, i18n, body) => - i18n.sentASticker(event.senderFromMemoryOrFallback.calcDisplayname()), - EventTypes.Redaction: (event, i18n, body) => i18n - .redactedAnEvent(event.senderFromMemoryOrFallback.calcDisplayname()), + EventTypes.Sticker: (event, i18n, body) => i18n.sentASticker( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), + EventTypes.Redaction: (event, i18n, body) => i18n.redactedAnEvent( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), EventTypes.RoomAliases: (event, i18n, body) => i18n.changedTheRoomAliases( - event.senderFromMemoryOrFallback.calcDisplayname()), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), EventTypes.RoomCanonicalAlias: (event, i18n, body) => i18n.changedTheRoomInvitationLink( - event.senderFromMemoryOrFallback.calcDisplayname()), - EventTypes.RoomCreate: (event, i18n, body) => - i18n.createdTheChat(event.senderFromMemoryOrFallback.calcDisplayname()), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), + EventTypes.RoomCreate: (event, i18n, body) => i18n.createdTheChat( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), EventTypes.RoomTombstone: (event, i18n, body) => i18n.roomHasBeenUpgraded, EventTypes.RoomJoinRules: (event, i18n, body) { final joinRules = JoinRules.values.firstWhereOrNull((r) => @@ -101,16 +101,17 @@ abstract class EventLocalizations { event.content['join_rule']); if (joinRules == null) { return i18n.changedTheJoinRules( - event.senderFromMemoryOrFallback.calcDisplayname()); + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); } else { return i18n.changedTheJoinRulesTo( - event.senderFromMemoryOrFallback.calcDisplayname(), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n), joinRules.getLocalizedString(i18n)); } }, EventTypes.RoomMember: (event, i18n, body) { - final targetName = event.stateKeyUser?.calcDisplayname() ?? ''; - final senderName = event.senderFromMemoryOrFallback.calcDisplayname(); + final targetName = event.stateKeyUser?.calcDisplayname(i18n: i18n) ?? ''; + final senderName = + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n); final userIsTarget = event.stateKey == event.room.client.userID; final userIsSender = event.senderId == event.room.client.userID; @@ -200,26 +201,26 @@ abstract class EventLocalizations { }, EventTypes.RoomPowerLevels: (event, i18n, body) => i18n.changedTheChatPermissions( - event.senderFromMemoryOrFallback.calcDisplayname()), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), EventTypes.RoomName: (event, i18n, body) => i18n.changedTheChatNameTo( - event.senderFromMemoryOrFallback.calcDisplayname(), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n), event.content['name']), EventTypes.RoomTopic: (event, i18n, body) => i18n.changedTheChatDescriptionTo( - event.senderFromMemoryOrFallback.calcDisplayname(), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n), event.content['topic']), EventTypes.RoomAvatar: (event, i18n, body) => i18n.changedTheChatAvatar( - event.senderFromMemoryOrFallback.calcDisplayname()), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), EventTypes.GuestAccess: (event, i18n, body) { final guestAccess = GuestAccess.values.firstWhereOrNull((r) => r.toString().replaceAll('GuestAccess.', '') == event.content['guest_access']); if (guestAccess == null) { return i18n.changedTheGuestAccessRules( - event.senderFromMemoryOrFallback.calcDisplayname()); + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); } else { return i18n.changedTheGuestAccessRulesTo( - event.senderFromMemoryOrFallback.calcDisplayname(), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n), guestAccess.getLocalizedString(i18n)); } }, @@ -229,35 +230,35 @@ abstract class EventLocalizations { event.content['history_visibility']); if (historyVisibility == null) { return i18n.changedTheHistoryVisibility( - event.senderFromMemoryOrFallback.calcDisplayname()); + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); } else { return i18n.changedTheHistoryVisibilityTo( - event.senderFromMemoryOrFallback.calcDisplayname(), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n), historyVisibility.getLocalizedString(i18n)); } }, EventTypes.Encryption: (event, i18n, body) { var localizedBody = i18n.activatedEndToEndEncryption( - event.senderFromMemoryOrFallback.calcDisplayname()); + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)); if (event.room.client.encryptionEnabled == false) { localizedBody += '. ${i18n.needPantalaimonWarning}'; } return localizedBody; }, - EventTypes.CallAnswer: (event, i18n, body) => i18n - .answeredTheCall(event.senderFromMemoryOrFallback.calcDisplayname()), - EventTypes.CallHangup: (event, i18n, body) => - i18n.endedTheCall(event.senderFromMemoryOrFallback.calcDisplayname()), - EventTypes.CallInvite: (event, i18n, body) => - i18n.startedACall(event.senderFromMemoryOrFallback.calcDisplayname()), + EventTypes.CallAnswer: (event, i18n, body) => i18n.answeredTheCall( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), + EventTypes.CallHangup: (event, i18n, body) => i18n.endedTheCall( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), + EventTypes.CallInvite: (event, i18n, body) => i18n.startedACall( + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), EventTypes.CallCandidates: (event, i18n, body) => i18n.sentCallInformations( - event.senderFromMemoryOrFallback.calcDisplayname()), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n)), EventTypes.Encrypted: (event, i18n, body) => _localizedBodyNormalMessage(event, i18n, body), EventTypes.Message: (event, i18n, body) => _localizedBodyNormalMessage(event, i18n, body), EventTypes.Reaction: (event, i18n, body) => i18n.sentReaction( - event.senderFromMemoryOrFallback.calcDisplayname(), + event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n), event.content .tryGetMap('m.relates_to') ?.tryGet('key') ?? diff --git a/lib/src/utils/matrix_default_localizations.dart b/lib/src/utils/matrix_default_localizations.dart index 328c3db6..f56a7856 100644 --- a/lib/src/utils/matrix_default_localizations.dart +++ b/lib/src/utils/matrix_default_localizations.dart @@ -269,4 +269,7 @@ class MatrixDefaultLocalizations extends MatrixLocalizations { @override String wasDirectChatDisplayName(String oldDisplayName) => 'Empty chat (was $oldDisplayName)'; + + @override + String get unknownUser => 'Unknown user'; } diff --git a/lib/src/utils/matrix_localizations.dart b/lib/src/utils/matrix_localizations.dart index e0056117..798cfbb9 100644 --- a/lib/src/utils/matrix_localizations.dart +++ b/lib/src/utils/matrix_localizations.dart @@ -58,6 +58,8 @@ abstract class MatrixLocalizations { String get youJoinedTheChat; + String get unknownUser; + String youInvitedBy(String senderName); String youInvitedUser(String targetName);