Update last message text in conversation list

This commit is contained in:
Benoit Martins 2025-11-26 09:47:16 +01:00
parent 0daba4fe03
commit 7bdb8fa92d
6 changed files with 89 additions and 33 deletions

View file

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="#4e6074" viewBox="0 0 256 256"><path d="M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM72,48v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80H48V48ZM208,208H48V96H208V208Zm-96-88v64a8,8,0,0,1-16,0V132.94l-4.42,2.22a8,8,0,0,1-7.16-14.32l16-8A8,8,0,0,1,112,120Zm59.16,30.45L152,176h16a8,8,0,0,1,0,16H136a8,8,0,0,1-6.4-12.8l28.78-38.37A8,8,0,1,0,145.07,132a8,8,0,1,1-13.85-8A24,24,0,0,1,176,136,23.76,23.76,0,0,1,171.16,150.45Z"></path></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM72,48v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80H48V48ZM208,208H48V96H208V208Zm-96-88v64a8,8,0,0,1-16,0V132.94l-4.42,2.22a8,8,0,0,1-7.16-14.32l16-8A8,8,0,0,1,112,120Zm59.16,30.45L152,176h16a8,8,0,0,1,0,16H136a8,8,0,0,1-6.4-12.8l28.78-38.37A8,8,0,1,0,145.07,132a8,8,0,1,1-13.85-8A24,24,0,0,1,176,136,23.76,23.76,0,0,1,171.16,150.45Z"></path></svg>

Before

Width:  |  Height:  |  Size: 604 B

After

Width:  |  Height:  |  Size: 604 B

View file

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "trash.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"></path></svg>

After

Width:  |  Height:  |  Size: 415 B

View file

@ -105,26 +105,46 @@ struct ConversationRow: View {
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(1)
if conversation.lastMessageInItalic {
Text(conversation.lastMessageText)
.italic()
.if(conversation.unreadMessagesCount > 0) { view in
view.bold()
}
.foregroundStyle(Color.grayMain2c400)
.font(.system(size: 14))
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(1)
} else {
Text(conversation.lastMessageText)
HStack(spacing: 0) {
Text(conversation.lastMessagePrefixText)
.foregroundStyle(Color.grayMain2c400)
.if(conversation.unreadMessagesCount > 0) { view in
view.default_text_style_700(styleSize: 14)
}
.default_text_style(styleSize: 14)
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(1)
.layoutPriority(1)
if !conversation.lastMessageIcon.isEmpty {
Image(conversation.lastMessageIcon)
.resizable()
.frame(width: 16, height: 16)
.layoutPriority(0)
.padding(.trailing, 2)
}
if conversation.lastMessageInItalic {
Text(conversation.lastMessageText)
.italic()
.if(conversation.unreadMessagesCount > 0) { view in
view.bold()
}
.foregroundStyle(Color.grayMain2c400)
.font(.system(size: 14))
.lineLimit(1)
.layoutPriority(-1)
} else {
Text(conversation.lastMessageText)
.foregroundStyle(Color.grayMain2c400)
.if(conversation.unreadMessagesCount > 0) { view in
view.default_text_style_700(styleSize: 14)
}
.default_text_style(styleSize: 14)
.lineLimit(1)
.layoutPriority(-1)
}
}
.frame(maxWidth: .infinity, alignment: .leading)
Spacer()
}

View file

@ -46,7 +46,9 @@ class ConversationModel: ObservableObject, Identifiable {
@Published var isMuted: Bool
@Published var isEphemeral: Bool
@Published var encryptionEnabled: Bool
@Published var lastMessagePrefixText: String
@Published var lastMessageText: String
@Published var lastMessageIcon: String
@Published var lastMessageIsOutgoing: Bool
@Published var lastMessageState: Int
@Published var lastMessageInItalic: Bool
@ -139,8 +141,12 @@ class ConversationModel: ObservableObject, Identifiable {
self.lastMessage = nil
self.lastMessagePrefixText = ""
self.lastMessageText = ""
self.lastMessageIcon = ""
self.lastMessageIsOutgoing = false
self.lastMessageState = 0
@ -297,9 +303,9 @@ class ConversationModel: ObservableObject, Identifiable {
fromAddressFriend = nil
}
var lastMessageTextTmp = (fromAddressFriend ?? "")
+ (lastMessage!.contents.first(where: {$0.isText == true})?.utf8Text ?? (lastMessage!.contents.first(where: {$0.isFile == true || $0.isFileTransfer == true})?.name ?? ""))
let lastMessagePrefixTextTmp = (fromAddressFriend ?? "")
var lastMessageTextTmp = (lastMessage!.contents.first(where: {$0.isText == true})?.utf8Text ?? (lastMessage!.contents.first(where: {$0.isFile == true || $0.isFileTransfer == true})?.name ?? ""))
var lastMessageIconTmp = ""
var lastMessageInItalicTmp = false
if lastMessage!.contents.first != nil && lastMessage!.contents.first!.isIcalendar == true {
@ -314,6 +320,8 @@ class ConversationModel: ObservableObject, Identifiable {
lastMessageTextTmp = String(localized: "message_meeting_invitation_cancelled_notification")
}
lastMessageIconTmp = "calendar"
lastMessageInItalicTmp = true
}
}
@ -322,9 +330,19 @@ class ConversationModel: ObservableObject, Identifiable {
if lastMessage!.isRetracted {
lastMessageTextTmp += lastMessage!.isOutgoing ? String(localized: "conversation_message_content_deleted_by_us_label") : String(localized: "conversation_message_content_deleted_label")
lastMessageIconTmp = "trash"
lastMessageInItalicTmp = true
}
if (lastMessage!.contents.first(where: {$0.isFile == true || $0.isFileTransfer == true})?.name != nil) {
lastMessageIconTmp = "file"
} else if lastMessage!.isReply {
lastMessageIconTmp = "reply"
} else if lastMessage!.isForward {
lastMessageIconTmp = "forward"
}
let lastMessageIsOutgoingTmp = lastMessage?.isOutgoing ?? false
let lastUpdateTimeTmp = lastMessage?.time ?? chatRoom.lastUpdateTime
@ -332,7 +350,11 @@ class ConversationModel: ObservableObject, Identifiable {
let lastMessageStateTmp = lastMessage?.state.rawValue ?? 0
DispatchQueue.main.async {
self.lastMessagePrefixText = lastMessagePrefixTextTmp
self.lastMessageText = lastMessageTextTmp
self.lastMessageIcon = lastMessageIconTmp
self.lastMessageIsOutgoing = lastMessageIsOutgoingTmp

View file

@ -89,20 +89,16 @@ class ConversationsListViewModel: ObservableObject {
fromAddressFriend = nil
}
var lastMessageTextTmp = (fromAddressFriend ?? "") + (lastMessage.contents.first(where: { $0.isText })?.utf8Text ?? (lastMessage.contents.first(where: { $0.isFile || $0.isFileTransfer })?.name ?? ""))
if lastMessage.isRetracted {
lastMessageTextTmp += lastMessage.isOutgoing ? String(localized: "conversation_message_content_deleted_by_us_label") : String(localized: "conversation_message_content_deleted_label")
}
let lastMessagePrefixTextTmp = (fromAddressFriend ?? "")
if let index = self.conversationsList.firstIndex(where: { $0.chatRoom === conversationModel.chatRoom }) {
DispatchQueue.main.async {
conversationModel.lastMessageText = lastMessageTextTmp
self.conversationsList[index].lastMessageText = lastMessageTextTmp
conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
self.conversationsList[index].lastMessagePrefixText = lastMessagePrefixTextTmp
}
} else {
DispatchQueue.main.async {
conversationModel.lastMessageText = lastMessageTextTmp
conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
}
}
}
@ -152,20 +148,16 @@ class ConversationsListViewModel: ObservableObject {
fromAddressFriend = nil
}
var lastMessageTextTmp = (fromAddressFriend ?? "") + (lastMessage.contents.first(where: { $0.isText })?.utf8Text ?? (lastMessage.contents.first(where: { $0.isFile || $0.isFileTransfer })?.name ?? ""))
if lastMessage.isRetracted {
lastMessageTextTmp += lastMessage.isOutgoing ? String(localized: "conversation_message_content_deleted_by_us_label") : String(localized: "conversation_message_content_deleted_label")
}
let lastMessagePrefixTextTmp = (fromAddressFriend ?? "")
if let index = self.conversationsList.firstIndex(where: { $0.chatRoom === conversationModel.chatRoom }) {
DispatchQueue.main.async {
conversationModel.lastMessageText = lastMessageTextTmp
self.conversationsList[index].lastMessageText = lastMessageTextTmp
conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
self.conversationsList[index].lastMessagePrefixText = lastMessagePrefixTextTmp
}
} else {
DispatchQueue.main.async {
conversationModel.lastMessageText = lastMessageTextTmp
conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
}
}
}