chore: Optimize StatusMessageReply using more Loaders

also fix the sender display name to respect ensName/nickname

Fixes: #9016
This commit is contained in:
Lukáš Tinkl 2023-01-20 16:36:55 +01:00 committed by Lukáš Tinkl
parent a8a3f5285e
commit 8569ea5b41
6 changed files with 49 additions and 40 deletions

View File

@ -527,6 +527,8 @@ method updateContactDetails*(self: Module, contactId: string) =
item.senderEnsVerified = updatedContact.details.ensVerified
if(item.quotedMessageAuthorDetails.details.id == contactId):
item.quotedMessageAuthorDetails = updatedContact
item.quotedMessageAuthorDisplayName = updatedContact.defaultDisplayName
item.quotedMessageAuthorAvatar = updatedContact.icon
if(item.messageContainsMentions):
let (message, _, err) = self.controller.getMessageDetails(item.id)
if(err.len == 0):

View File

@ -146,8 +146,7 @@ proc initItem*(
if result.quotedMessageAuthorAvatar == "":
result.quotedMessageAuthorAvatar = quotedMessageDiscordMessage.author.avatarUrl
else:
result.quotedMessageAuthorDisplayName = if quotedMessageAuthorDetails.details.localNickname != "": quotedMessageAuthorDetails.details.localNickname
else: quotedMessageAuthorDetails.details.displayName
result.quotedMessageAuthorDisplayName = quotedMessageAuthorDetails.details.userDefaultDisplayName()
result.quotedMessageAuthorAvatar = quotedMessageAuthorDetails.details.image.thumbnail
if contentType == ContentType.DiscordMessage:

View File

@ -10,8 +10,8 @@ StatusBaseText {
property double messageTimestamp
readonly property int msInADay: 86400000
readonly property int lastMessageInDays: Math.floor(previousMessageTimestamp / msInADay)
readonly property int currentMessageInDays: Math.floor(messageTimestamp / msInADay)
readonly property int lastMessageInDays: previousMessageTimestamp / msInADay
readonly property int currentMessageInDays: messageTimestamp / msInADay
font.pixelSize: 13
color: Theme.palette.baseColor1

View File

@ -67,6 +67,8 @@ Item {
anchors.fill: parent
RowLayout {
Layout.fillWidth: true
StatusSmartIdenticon {
id: profileImage
Layout.alignment: Qt.AlignTop
@ -78,7 +80,7 @@ Item {
acceptedButtons: Qt.LeftButton | Qt.RightButton
anchors.fill: parent
enabled: root.profileClickable
onClicked: replyProfileClicked(this, mouse)
onClicked: root.replyProfileClicked(this, mouse)
}
}
StatusBaseText {
@ -89,44 +91,50 @@ Item {
text: replyDetails.amISender ? qsTr("You") : replyDetails.sender.displayName
}
}
// FIXME OPTIMIZE by using Loaders
StatusTextMessage {
objectName: "StatusMessage_replyDetails_textMessage"
Loader {
Layout.fillWidth: true
textField.font.pixelSize: Theme.secondaryTextFontSize
textField.color: Theme.palette.baseColor1
visible: !!replyDetails.messageText && replyDetails.contentType !== StatusMessage.ContentType.Sticker
allowShowMore: false
stripHtmlTags: true
convertToSingleLine: true
messageDetails: root.replyDetails
}
StatusImageMessage {
Layout.fillWidth: true
Layout.preferredHeight: imageAlias.paintedHeight
imageWidth: 56
source: replyDetails.contentType === StatusMessage.ContentType.Image ? replyDetails.messageContent : ""
visible: source
shapeType: StatusImageMessage.ShapeType.ROUNDED
}
Item {
Layout.fillWidth: true
Layout.preferredHeight: 48
Layout.alignment: Qt.AlignLeft
visible: replyDetails.contentType === StatusMessage.ContentType.Sticker
StatusSticker {
asset.width: 48
asset.height: 48
asset.name: replyDetails.messageContent
asset.isImage: true
asynchronous: true
active: !!replyDetails.messageText && replyDetails.contentType !== StatusMessage.ContentType.Sticker
visible: active
sourceComponent: StatusTextMessage {
objectName: "StatusMessage_replyDetails_textMessage"
textField.font.pixelSize: Theme.secondaryTextFontSize
textField.color: Theme.palette.baseColor1
allowShowMore: false
stripHtmlTags: true
convertToSingleLine: true
messageDetails: root.replyDetails
}
}
Item {
Loader {
Layout.fillWidth: true
asynchronous: true
active: replyDetails.contentType === StatusMessage.ContentType.Image
visible: active
sourceComponent: StatusImageMessage {
Layout.fillWidth: true
Layout.preferredHeight: imageAlias.paintedHeight
imageWidth: 56
source: replyDetails.messageContent
shapeType: StatusImageMessage.ShapeType.ROUNDED
}
}
StatusSticker {
asynchronous: true
active: replyDetails.contentType === StatusMessage.ContentType.Sticker
visible: active
asset.width: 48
asset.height: 48
asset.name: replyDetails.messageContent
asset.isImage: true
}
Loader {
Layout.fillWidth: true
Layout.preferredHeight: 22
visible: replyDetails.contentType === StatusMessage.ContentType.Audio
StatusAudioMessage {
id: audioMessage
asynchronous: true
active: replyDetails.contentType === StatusMessage.ContentType.Audio
visible: active
sourceComponent: StatusAudioMessage {
anchors.left: parent.left
width: 125
height: 22

View File

@ -96,7 +96,7 @@ Item {
messageContextMenu.isProfile = true
messageContextMenu.myPublicKey = userProfile.pubKey
messageContextMenu.selectedUserPublicKey = model.pubKey
messageContextMenu.selectedUserDisplayName = nickName || userName
messageContextMenu.selectedUserDisplayName = title
messageContextMenu.selectedUserIcon = model.icon
messageContextMenu.popup(4, 4)
} else if (mouse.button === Qt.LeftButton && !!messageContextMenu) {

View File

@ -89,7 +89,7 @@ Loader {
property string prevMessageSenderId: prevMessageAsJsonObj ? prevMessageAsJsonObj.senderId : ""
property var prevMessageAsJsonObj
property int nextMessageIndex: -1
property int nextMessageTimestamp: nextMessageAsJsonObj ? nextMessageAsJsonObj.timestamp : 0
property double nextMessageTimestamp: nextMessageAsJsonObj ? nextMessageAsJsonObj.timestamp : 0
property var nextMessageAsJsonObj
property bool editModeOn: false