Add participant name to reply message bubble

This commit is contained in:
Benoit Martins 2024-08-27 17:24:33 +02:00
parent ace392528b
commit 24435dcb92
2 changed files with 60 additions and 5 deletions

View file

@ -70,7 +70,17 @@ struct ChatBubbleView: View {
Spacer()
}
VStack(alignment: eventLogMessage.message.isOutgoing ? .trailing : .leading) {
VStack(alignment: eventLogMessage.message.isOutgoing ? .trailing : .leading, spacing: 0) {
HStack {
Image("reply")
.resizable()
.frame(width: 15, height: 15, alignment: .leading)
Text(conversationViewModel.participantConversationModel.first(where: {$0.address == eventLogMessage.message.replyMessage!.address})?.name ?? "")
.default_text_style(styleSize: 12)
}
.padding(.bottom, 2)
VStack(alignment: eventLogMessage.message.isOutgoing ? .trailing : .leading) {
if !eventLogMessage.message.replyMessage!.text.isEmpty {
Text(eventLogMessage.message.replyMessage!.text)

View file

@ -198,6 +198,17 @@ class ConversationViewModel: ObservableObject {
}
}
func addParticipantConversationModel(address: Address) {
coreContext.doOnCoreQueue { core in
ContactAvatarModel.getAvatarModelFromAddress(address: address) { avatarResult in
let avatarModelTmp = avatarResult
DispatchQueue.main.async {
self.participantConversationModel.append(avatarModelTmp)
}
}
}
}
func getMessages() {
self.getHistorySize()
self.getUnreadMessagesCount()
@ -283,6 +294,10 @@ class ConversationViewModel: ObservableObject {
let addressCleaned = eventLog.chatMessage?.fromAddress?.clone()
addressCleaned?.clean()
if addressCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressCleaned!)
}
let isFirstMessageIncomingTmp = index > 0 ? addressPrecCleaned?.asStringUriOnly() != addressCleaned?.asStringUriOnly() : true
let isFirstMessageOutgoingTmp = index <= historyEvents.count - 2 ? addressNextCleaned?.asStringUriOnly() != addressCleaned?.asStringUriOnly() : true
@ -316,7 +331,11 @@ class ConversationViewModel: ObservableObject {
var replyMessageTmp: ReplyMessage?
if eventLog.chatMessage?.replyMessage != nil {
let addressReplyCleaned = eventLog.chatMessage?.replyMessage?.fromAddress?.clone()
addressCleaned?.clean()
addressReplyCleaned?.clean()
if addressReplyCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressReplyCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressReplyCleaned!)
}
let contentReplyText = eventLog.chatMessage?.replyMessage?.utf8Text ?? ""
@ -474,6 +493,10 @@ class ConversationViewModel: ObservableObject {
let addressCleaned = eventLog.chatMessage?.fromAddress?.clone()
addressCleaned?.clean()
if addressCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressCleaned!)
}
let isFirstMessageIncomingTmp = index > 0 ? addressPrecCleaned?.asStringUriOnly() != addressCleaned?.asStringUriOnly() : true
let isFirstMessageOutgoingTmp = index <= historyEvents.count - 2 ? addressNextCleaned?.asStringUriOnly() != addressCleaned?.asStringUriOnly() : true
@ -507,7 +530,11 @@ class ConversationViewModel: ObservableObject {
var replyMessageTmp: ReplyMessage?
if eventLog.chatMessage?.replyMessage != nil {
let addressReplyCleaned = eventLog.chatMessage?.replyMessage?.fromAddress?.clone()
addressCleaned?.clean()
addressReplyCleaned?.clean()
if addressReplyCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressReplyCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressReplyCleaned!)
}
let contentReplyText = eventLog.chatMessage?.replyMessage?.utf8Text ?? ""
@ -591,6 +618,7 @@ class ConversationViewModel: ObservableObject {
}
}
// swiftlint:disable cyclomatic_complexity
func getNewMessages(eventLogs: [EventLog]) {
eventLogs.enumerated().forEach { index, eventLog in
var attachmentNameList: String = ""
@ -663,6 +691,10 @@ class ConversationViewModel: ObservableObject {
let addressCleaned = eventLog.chatMessage?.fromAddress?.clone()
addressCleaned?.clean()
if addressCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressCleaned!)
}
let isFirstMessageIncomingTmp = index > 0
? addressPrecCleaned?.asStringUriOnly() != addressCleaned?.asStringUriOnly()
: (
@ -711,7 +743,11 @@ class ConversationViewModel: ObservableObject {
var replyMessageTmp: ReplyMessage?
if eventLog.chatMessage?.replyMessage != nil {
let addressReplyCleaned = eventLog.chatMessage?.replyMessage?.fromAddress?.clone()
addressCleaned?.clean()
addressReplyCleaned?.clean()
if addressReplyCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressReplyCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressReplyCleaned!)
}
let contentReplyText = eventLog.chatMessage?.replyMessage?.utf8Text ?? ""
@ -806,6 +842,7 @@ class ConversationViewModel: ObservableObject {
}
}
}
// swiftlint:enable cyclomatic_complexity
func resetMessage() {
conversationMessagesSection = []
@ -926,6 +963,10 @@ class ConversationViewModel: ObservableObject {
let addressCleaned = eventLog.chatMessage?.fromAddress?.clone()
addressCleaned?.clean()
if addressCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressCleaned!)
}
let isFirstMessageIncomingTmp = index > 0 ? addressPrecCleaned?.asStringUriOnly() != addressCleaned?.asStringUriOnly() : true
let isFirstMessageOutgoingTmp = index <= historyEvents.count - 2 ? addressNextCleaned?.asStringUriOnly() != addressCleaned?.asStringUriOnly() : true
@ -959,7 +1000,11 @@ class ConversationViewModel: ObservableObject {
var replyMessageTmp: ReplyMessage?
if eventLog.chatMessage?.replyMessage != nil {
let addressReplyCleaned = eventLog.chatMessage?.replyMessage?.fromAddress?.clone()
addressCleaned?.clean()
addressReplyCleaned?.clean()
if addressReplyCleaned != nil && self.participantConversationModel.first(where: {$0.address == addressReplyCleaned!.asStringUriOnly()}) == nil {
self.addParticipantConversationModel(address: addressReplyCleaned!)
}
let contentReplyText = eventLog.chatMessage?.replyMessage?.utf8Text ?? ""