mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 20:09:04 +00:00
Fixes #2706 - Use disambiguated display names for timeline item senders and state event bodies. (#2739)
This commit is contained in:
@@ -18,36 +18,35 @@ import Foundation
|
||||
import MatrixRustSDK
|
||||
|
||||
struct RoomEventStringBuilder {
|
||||
private let stateEventStringBuilder: RoomStateEventStringBuilder
|
||||
private let messageEventStringBuilder: RoomMessageEventStringBuilder
|
||||
|
||||
init(stateEventStringBuilder: RoomStateEventStringBuilder, messageEventStringBuilder: RoomMessageEventStringBuilder) {
|
||||
self.stateEventStringBuilder = stateEventStringBuilder
|
||||
self.messageEventStringBuilder = messageEventStringBuilder
|
||||
}
|
||||
let stateEventStringBuilder: RoomStateEventStringBuilder
|
||||
let messageEventStringBuilder: RoomMessageEventStringBuilder
|
||||
let shouldDisambiguateDisplayNames: Bool
|
||||
|
||||
func buildAttributedString(for eventItemProxy: EventTimelineItemProxy) -> AttributedString? {
|
||||
let sender = eventItemProxy.sender
|
||||
let isOutgoing = eventItemProxy.isOwn
|
||||
|
||||
let senderDisplayName = sender.displayName ?? sender.id
|
||||
let displayName = if shouldDisambiguateDisplayNames {
|
||||
sender.disambiguatedDisplayName ?? sender.id
|
||||
} else {
|
||||
sender.displayName ?? sender.id
|
||||
}
|
||||
|
||||
switch eventItemProxy.content.kind() {
|
||||
case .unableToDecrypt:
|
||||
return prefix(L10n.commonDecryptionError, with: senderDisplayName)
|
||||
return prefix(L10n.commonDecryptionError, with: displayName)
|
||||
case .redactedMessage:
|
||||
return prefix(L10n.commonMessageRemoved, with: senderDisplayName)
|
||||
return prefix(L10n.commonMessageRemoved, with: displayName)
|
||||
case .sticker:
|
||||
return prefix(L10n.commonSticker, with: senderDisplayName)
|
||||
return prefix(L10n.commonSticker, with: displayName)
|
||||
case .failedToParseMessageLike, .failedToParseState:
|
||||
return prefix(L10n.commonUnsupportedEvent, with: senderDisplayName)
|
||||
return prefix(L10n.commonUnsupportedEvent, with: displayName)
|
||||
case .message:
|
||||
guard let messageContent = eventItemProxy.content.asMessage() else {
|
||||
fatalError("Invalid message timeline item: \(eventItemProxy)")
|
||||
}
|
||||
|
||||
let messageType = messageContent.msgtype()
|
||||
return messageEventStringBuilder.buildAttributedString(for: messageType, senderDisplayName: senderDisplayName, prefixWithSenderName: true)
|
||||
return messageEventStringBuilder.buildAttributedString(for: messageType, senderDisplayName: displayName, prefixWithSenderName: true)
|
||||
case .state(_, let state):
|
||||
return stateEventStringBuilder
|
||||
.buildString(for: state, sender: sender, isOutgoing: isOutgoing)
|
||||
@@ -66,9 +65,9 @@ struct RoomEventStringBuilder {
|
||||
memberIsYou: isOutgoing)
|
||||
.map(AttributedString.init)
|
||||
case .poll(let question, _, _, _, _, _, _):
|
||||
return prefix(L10n.commonPollSummary(question), with: senderDisplayName)
|
||||
return prefix(L10n.commonPollSummary(question), with: displayName)
|
||||
case .callInvite:
|
||||
return prefix(L10n.commonCallInvite, with: senderDisplayName)
|
||||
return prefix(L10n.commonCallInvite, with: displayName)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user