Fix(@message) Album of images disappears from reply after reloading the application (#12806)
Fixes #10986 This PR contains 2 changes : 1- Adding of properties for the quotedMessage 2- Update of the view with the properties with Qml binding
This commit is contained in:
parent
4e296d5acf
commit
aaa759f70c
|
@ -138,6 +138,8 @@ proc createMessageItemFromDto(self: Module, message: MessageDto, communityId: st
|
|||
message.quotedMessage.deleted,
|
||||
message.quotedMessage.discordMessage,
|
||||
quotedMessageAuthorDetails,
|
||||
message.quotedMessage.albumImages,
|
||||
message.quotedMessage.albumImagesCount,
|
||||
message.albumId,
|
||||
imagesAlbum,
|
||||
albumMessageIds,
|
||||
|
|
|
@ -137,6 +137,8 @@ proc createFetchMoreMessagesItem(self: Module): Item =
|
|||
quotedMessageDeleted = false,
|
||||
quotedMessageDiscordMessage = DiscordMessage(),
|
||||
quotedMessageAuthorDetails = ContactDetails(),
|
||||
quotedMessageAlbumMessageImages = @[],
|
||||
quotedMessageAlbumImagesCount = 0,
|
||||
albumId = "",
|
||||
albumMessageImages = @[],
|
||||
albumMessageIds = @[],
|
||||
|
@ -197,6 +199,8 @@ proc createChatIdentifierItem(self: Module): Item =
|
|||
quotedMessageDeleted = false,
|
||||
quotedMessageDiscordMessage = DiscordMessage(),
|
||||
quotedMessageAuthorDetails = ContactDetails(),
|
||||
quotedMessageAlbumMessageImages = @[],
|
||||
quotedMessageAlbumImagesCount = 0,
|
||||
albumId = "",
|
||||
albumMessageImages = @[],
|
||||
albumMessageIds = @[],
|
||||
|
@ -232,9 +236,41 @@ method reevaluateViewLoadingState*(self: Module) =
|
|||
self.firstUnseenMessageState.fetching or
|
||||
self.view.getMessageSearchOngoing())
|
||||
|
||||
# TODO: Fetch the message from status-go. The generated albumIdToImagesMap is built on the messages received and does not account for
|
||||
# older messages for which the images would not be found. Ticket https://github.com/status-im/status-desktop/issues/12821
|
||||
proc generateAlbumIdToImageMap(self: Module, messages: seq[MessageDto]): Table[string, seq[string]] =
|
||||
var albumIdToImagesMap = initTable[string, seq[string]]()
|
||||
|
||||
for message in messages:
|
||||
if message.albumId in albumIdToImagesMap:
|
||||
albumIdToImagesMap[message.albumId].add(message.image)
|
||||
else:
|
||||
albumIdToImagesMap[message.albumId] = @[message.image]
|
||||
|
||||
return albumIdToImagesMap
|
||||
|
||||
|
||||
proc setQuotedMessageImages(self: Module, message: MessageDto, items: var seq[Item], albumIdToImagesMap: Table[string, seq[string]]) =
|
||||
for i in 0 ..< items.len:
|
||||
let item = items[i]
|
||||
|
||||
var quotedMessageAlbumMessageImages = item.quotedMessageAlbumMessageImages
|
||||
|
||||
if message.id != item.responseToMessageWithId:
|
||||
continue
|
||||
if message.albumId notin albumIdToImagesMap:
|
||||
continue
|
||||
|
||||
quotedMessageAlbumMessageImages = albumIdToImagesMap[message.albumId]
|
||||
item.quotedMessageAlbumMessageImages = quotedMessageAlbumMessageImages
|
||||
item.quotedMessageAlbumImagesCount = quotedMessageAlbumMessageImages.len
|
||||
items[i] = item
|
||||
|
||||
method newMessagesLoaded*(self: Module, messages: seq[MessageDto], reactions: seq[ReactionDto]) =
|
||||
var viewItems: seq[Item]
|
||||
|
||||
var albumIdToImagesMap = self.generateAlbumIdToImageMap(messages)
|
||||
|
||||
if(messages.len > 0):
|
||||
for message in messages:
|
||||
# https://github.com/status-im/status-desktop/issues/7632 will introduce deleteFroMe feature.
|
||||
|
@ -260,6 +296,8 @@ method newMessagesLoaded*(self: Module, messages: seq[MessageDto], reactions: se
|
|||
if (self.view.model().updateAlbumIfExists(message.albumId, message.image, message.id)):
|
||||
continue
|
||||
|
||||
self.setQuotedMessageImages(message, viewItems, albumIdToImagesMap)
|
||||
|
||||
if (self.updateItemsByAlbum(viewItems, message)):
|
||||
continue
|
||||
|
||||
|
@ -318,6 +356,8 @@ method newMessagesLoaded*(self: Module, messages: seq[MessageDto], reactions: se
|
|||
message.quotedMessage.deleted,
|
||||
message.quotedMessage.discordMessage,
|
||||
quotedMessageAuthorDetails,
|
||||
message.quotedMessage.albumImages,
|
||||
message.quotedMessage.albumImagesCount,
|
||||
message.albumId,
|
||||
if (len(message.albumId) == 0): @[] else: @[message.image],
|
||||
if (len(message.albumId) == 0): @[] else: @[message.id],
|
||||
|
@ -455,6 +495,8 @@ method messagesAdded*(self: Module, messages: seq[MessageDto]) =
|
|||
message.quotedMessage.deleted,
|
||||
message.quotedMessage.discordMessage,
|
||||
quotedMessageAuthorDetails,
|
||||
message.quotedMessage.albumImages,
|
||||
message.quotedMessage.albumImagesCount,
|
||||
message.albumId,
|
||||
if (len(message.albumId) == 0): @[] else: @[message.image],
|
||||
if (len(message.albumId) == 0): @[] else: @[message.id],
|
||||
|
|
|
@ -219,6 +219,8 @@ proc buildPinnedMessageItem(self: Module, message: MessageDto, actionInitiatedBy
|
|||
message.quotedMessage.deleted,
|
||||
message.quotedMessage.discordMessage,
|
||||
quotedMessageAuthorDetails,
|
||||
message.quotedMessage.albumImages,
|
||||
message.quotedMessage.albumImagesCount,
|
||||
message.albumId,
|
||||
if (len(message.albumId) == 0): @[] else: @[message.image],
|
||||
if (len(message.albumId) == 0): @[] else: @[message.id],
|
||||
|
|
|
@ -59,6 +59,8 @@ type
|
|||
quotedMessageAuthorDisplayName: string
|
||||
quotedMessageAuthorAvatar: string
|
||||
quotedMessageAuthorDetails: ContactDetails
|
||||
quotedMessageAlbumMessageImages: seq[string]
|
||||
quotedMessageAlbumImagesCount: int
|
||||
albumId: string
|
||||
albumMessageImages: seq[string]
|
||||
albumMessageIds: seq[string]
|
||||
|
@ -105,6 +107,8 @@ proc initItem*(
|
|||
quotedMessageDeleted: bool,
|
||||
quotedMessageDiscordMessage: DiscordMessage,
|
||||
quotedMessageAuthorDetails: ContactDetails,
|
||||
quotedMessageAlbumMessageImages: seq[string],
|
||||
quotedMessageAlbumImagesCount: int,
|
||||
albumId: string,
|
||||
albumMessageImages: seq[string],
|
||||
albumMessageIds: seq[string],
|
||||
|
@ -156,6 +160,8 @@ proc initItem*(
|
|||
result.quotedMessageContentType = quotedMessageContentType
|
||||
result.quotedMessageDeleted = quotedMessageDeleted
|
||||
result.quotedMessageAuthorDetails = quotedMessageAuthorDetails
|
||||
result.quotedMessageAlbumMessageImages = quotedMessageAlbumMessageImages
|
||||
result.quotedMessageAlbumImagesCount = quotedMessageAlbumImagesCount
|
||||
result.albumId = albumId
|
||||
result.albumMessageImages = albumMessageImages
|
||||
result.albumMessageIds = albumMessageIds
|
||||
|
@ -232,6 +238,8 @@ proc initNewMessagesMarkerItem*(clock, timestamp: int64): Item =
|
|||
quotedMessageDeleted = false,
|
||||
quotedMessageDiscordMessage = DiscordMessage(),
|
||||
quotedMessageAuthorDetails = ContactDetails(),
|
||||
quotedMessageAlbumMessageImages = @[],
|
||||
quotedMessageAlbumImagesCount = 0,
|
||||
albumId = "",
|
||||
albumMessageImages = @[],
|
||||
albumMessageIds = @[],
|
||||
|
@ -504,6 +512,8 @@ proc toJsonNode*(self: Item): JsonNode =
|
|||
"quotedMessageDeleted": self.quotedMessageDeleted,
|
||||
"quotedMessageAuthorDisplayName": self.quotedMessageAuthorDisplayName,
|
||||
"quotedMessageAuthorAvatar": self.quotedMessageAuthorAvatar,
|
||||
"quotedMessageAlbumMessageImages": self.quotedMessageAlbumMessageImages,
|
||||
"quotedMessageAlbumImagesCount": self.quotedMessageAlbumImagesCount,
|
||||
"albumId": self.albumId,
|
||||
"albumMessageImages": self.albumMessageImages,
|
||||
"albumMessageIds": self.albumMessageIds,
|
||||
|
@ -581,3 +591,15 @@ proc quotedMessageAuthorDetails*(self: Item): ContactDetails {.inline.} =
|
|||
self.quotedMessageAuthorDetails
|
||||
proc `quotedMessageAuthorDetails=`*(self: Item, value: ContactDetails) {.inline.} =
|
||||
self.quotedMessageAuthorDetails = value
|
||||
|
||||
proc quotedMessageAlbumMessageImages*(self: Item): seq[string] {.inline.} =
|
||||
self.quotedMessageAlbumMessageImages
|
||||
|
||||
proc `quotedMessageAlbumMessageImages=`*(self: Item, value: seq[string]) {.inline.} =
|
||||
self.quotedMessageAlbumMessageImages = value
|
||||
|
||||
proc quotedMessageAlbumImagesCount*(self: Item): int {.inline.} =
|
||||
self.quotedMessageAlbumImagesCount
|
||||
|
||||
proc `quotedMessageAlbumImagesCount=`*(self: Item, value: int) {.inline.} =
|
||||
self.quotedMessageAlbumImagesCount = value
|
|
@ -58,6 +58,14 @@ QtObject:
|
|||
QtProperty[string] quotedMessageAuthorAvatar:
|
||||
read = quotedMessageAuthorAvatar
|
||||
|
||||
proc quotedMessageAlbumMessageImages*(self: MessageItem): string {.slot.} = result = ?.self.messageItem.quotedMessageAlbumMessageImages.join(" ")
|
||||
QtProperty[string] quotedMessageAlbumMessageImages:
|
||||
read = quotedMessageAlbumMessageImages
|
||||
|
||||
proc quotedMessageAlbumImagesCount*(self: MessageItem): int {.slot.} = result = ?.self.messageItem.quotedMessageAlbumImagesCount
|
||||
QtProperty[int] quotedMessageAlbumImagesCount:
|
||||
read = quotedMessageAlbumImagesCount
|
||||
|
||||
proc senderId*(self: MessageItem): string {.slot.} = result = ?.self.messageItem.senderId
|
||||
QtProperty[string] senderId:
|
||||
read = senderId
|
||||
|
|
|
@ -62,6 +62,8 @@ type
|
|||
QuotedMessageAuthorEnsVerified
|
||||
QuotedMessageAuthorIsContact
|
||||
QuotedMessageAuthorColorHash
|
||||
QuotedMessageAlbumMessageImages
|
||||
QuotedMessageAlbumImagesCount
|
||||
AlbumMessageImages
|
||||
AlbumImagesCount
|
||||
|
||||
|
@ -158,6 +160,8 @@ QtObject:
|
|||
ModelRole.QuotedMessageAuthorEnsVerified.int: "quotedMessageAuthorEnsVerified",
|
||||
ModelRole.QuotedMessageAuthorIsContact.int: "quotedMessageAuthorIsContact",
|
||||
ModelRole.QuotedMessageAuthorColorHash.int: "quotedMessageAuthorColorHash",
|
||||
ModelRole.QuotedMessageAlbumMessageImages.int: "quotedMessageAlbumMessageImages",
|
||||
ModelRole.QuotedMessageAlbumImagesCount.int: "quotedMessageAlbumImagesCount",
|
||||
ModelRole.AlbumMessageImages.int: "albumMessageImages",
|
||||
ModelRole.AlbumImagesCount.int: "albumImagesCount",
|
||||
}.toTable
|
||||
|
@ -253,6 +257,10 @@ QtObject:
|
|||
result = newQVariant(item.quotedMessageAuthorDetails.dto.isContact())
|
||||
of ModelRole.QuotedMessageAuthorColorHash:
|
||||
result = newQVariant(item.quotedMessageAuthorDetails.colorHash)
|
||||
of ModelRole.QuotedMessageAlbumMessageImages:
|
||||
result = newQVariant(item.quotedMessageAlbumMessageImages.join(" "))
|
||||
of ModelRole.QuotedMessageAlbumImagesCount:
|
||||
result = newQVariant(item.quotedMessageAlbumImagesCount)
|
||||
of ModelRole.MessageText:
|
||||
result = newQVariant(item.messageText)
|
||||
of ModelRole.UnparsedText:
|
||||
|
|
|
@ -64,6 +64,8 @@ type QuotedMessage* = object
|
|||
contentType*: ContentType
|
||||
deleted*: bool
|
||||
discordMessage*: DiscordMessage
|
||||
albumImages*: seq[string]
|
||||
albumImagesCount*: int
|
||||
|
||||
type Sticker* = object
|
||||
hash*: string
|
||||
|
|
|
@ -50,6 +50,8 @@ proc createTestMessageItem(id: string, clock: int64): Item =
|
|||
quotedMessageDeleted = false,
|
||||
quotedMessageDiscordMessage = DiscordMessage(),
|
||||
quotedMessageAuthorDetails = ContactDetails(),
|
||||
quotedMessageAlbumMessageImages = @[],
|
||||
quotedMessageAlbumImagesCount = 0,
|
||||
albumId = "",
|
||||
albumMessageImages = @[],
|
||||
albumMessageIds = @[],
|
||||
|
|
|
@ -311,6 +311,8 @@ Item {
|
|||
quotedMessageAuthorDetailsEnsVerified: model.quotedMessageAuthorEnsVerified
|
||||
quotedMessageAuthorDetailsIsContact: model.quotedMessageAuthorIsContact
|
||||
quotedMessageAuthorDetailsColorHash: model.quotedMessageAuthorColorHash
|
||||
quotedMessageAlbumMessageImages: model.quotedMessageAlbumMessageImages.split(" ")
|
||||
quotedMessageAlbumImagesCount: model.quotedMessageAlbumImagesCount
|
||||
|
||||
gapFrom: model.gapFrom
|
||||
gapTo: model.gapTo
|
||||
|
|
|
@ -90,6 +90,9 @@ Loader {
|
|||
property var album: []
|
||||
property int albumCount: 0
|
||||
|
||||
property var quotedMessageAlbumMessageImages: []
|
||||
property var quotedMessageAlbumImagesCount: 0
|
||||
|
||||
// External behavior changers
|
||||
property bool isInPinnedPopup: false // The pinned popup limits the number of buttons shown
|
||||
property bool disableHover: false // Used to force the HoverHandler to be active (useful for messages in popups)
|
||||
|
@ -695,6 +698,8 @@ Loader {
|
|||
return qsTr("Unknown message. Try fetching more messages")
|
||||
return root.quotedMessageText
|
||||
}
|
||||
album: root.quotedMessageAlbumMessageImages
|
||||
albumCount: root.quotedMessageAlbumImagesCount
|
||||
messageDeleted: root.quotedMessageDeleted
|
||||
contentType: d.convertContentType(root.quotedMessageContentType)
|
||||
amISender: root.quotedMessageFrom === userProfile.pubKey
|
||||
|
|
Loading…
Reference in New Issue