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.deleted,
|
||||||
message.quotedMessage.discordMessage,
|
message.quotedMessage.discordMessage,
|
||||||
quotedMessageAuthorDetails,
|
quotedMessageAuthorDetails,
|
||||||
|
message.quotedMessage.albumImages,
|
||||||
|
message.quotedMessage.albumImagesCount,
|
||||||
message.albumId,
|
message.albumId,
|
||||||
imagesAlbum,
|
imagesAlbum,
|
||||||
albumMessageIds,
|
albumMessageIds,
|
||||||
|
|
|
@ -137,6 +137,8 @@ proc createFetchMoreMessagesItem(self: Module): Item =
|
||||||
quotedMessageDeleted = false,
|
quotedMessageDeleted = false,
|
||||||
quotedMessageDiscordMessage = DiscordMessage(),
|
quotedMessageDiscordMessage = DiscordMessage(),
|
||||||
quotedMessageAuthorDetails = ContactDetails(),
|
quotedMessageAuthorDetails = ContactDetails(),
|
||||||
|
quotedMessageAlbumMessageImages = @[],
|
||||||
|
quotedMessageAlbumImagesCount = 0,
|
||||||
albumId = "",
|
albumId = "",
|
||||||
albumMessageImages = @[],
|
albumMessageImages = @[],
|
||||||
albumMessageIds = @[],
|
albumMessageIds = @[],
|
||||||
|
@ -197,6 +199,8 @@ proc createChatIdentifierItem(self: Module): Item =
|
||||||
quotedMessageDeleted = false,
|
quotedMessageDeleted = false,
|
||||||
quotedMessageDiscordMessage = DiscordMessage(),
|
quotedMessageDiscordMessage = DiscordMessage(),
|
||||||
quotedMessageAuthorDetails = ContactDetails(),
|
quotedMessageAuthorDetails = ContactDetails(),
|
||||||
|
quotedMessageAlbumMessageImages = @[],
|
||||||
|
quotedMessageAlbumImagesCount = 0,
|
||||||
albumId = "",
|
albumId = "",
|
||||||
albumMessageImages = @[],
|
albumMessageImages = @[],
|
||||||
albumMessageIds = @[],
|
albumMessageIds = @[],
|
||||||
|
@ -232,9 +236,41 @@ method reevaluateViewLoadingState*(self: Module) =
|
||||||
self.firstUnseenMessageState.fetching or
|
self.firstUnseenMessageState.fetching or
|
||||||
self.view.getMessageSearchOngoing())
|
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]) =
|
method newMessagesLoaded*(self: Module, messages: seq[MessageDto], reactions: seq[ReactionDto]) =
|
||||||
var viewItems: seq[Item]
|
var viewItems: seq[Item]
|
||||||
|
|
||||||
|
var albumIdToImagesMap = self.generateAlbumIdToImageMap(messages)
|
||||||
|
|
||||||
if(messages.len > 0):
|
if(messages.len > 0):
|
||||||
for message in messages:
|
for message in messages:
|
||||||
# https://github.com/status-im/status-desktop/issues/7632 will introduce deleteFroMe feature.
|
# 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)):
|
if (self.view.model().updateAlbumIfExists(message.albumId, message.image, message.id)):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
self.setQuotedMessageImages(message, viewItems, albumIdToImagesMap)
|
||||||
|
|
||||||
if (self.updateItemsByAlbum(viewItems, message)):
|
if (self.updateItemsByAlbum(viewItems, message)):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -318,6 +356,8 @@ method newMessagesLoaded*(self: Module, messages: seq[MessageDto], reactions: se
|
||||||
message.quotedMessage.deleted,
|
message.quotedMessage.deleted,
|
||||||
message.quotedMessage.discordMessage,
|
message.quotedMessage.discordMessage,
|
||||||
quotedMessageAuthorDetails,
|
quotedMessageAuthorDetails,
|
||||||
|
message.quotedMessage.albumImages,
|
||||||
|
message.quotedMessage.albumImagesCount,
|
||||||
message.albumId,
|
message.albumId,
|
||||||
if (len(message.albumId) == 0): @[] else: @[message.image],
|
if (len(message.albumId) == 0): @[] else: @[message.image],
|
||||||
if (len(message.albumId) == 0): @[] else: @[message.id],
|
if (len(message.albumId) == 0): @[] else: @[message.id],
|
||||||
|
@ -455,6 +495,8 @@ method messagesAdded*(self: Module, messages: seq[MessageDto]) =
|
||||||
message.quotedMessage.deleted,
|
message.quotedMessage.deleted,
|
||||||
message.quotedMessage.discordMessage,
|
message.quotedMessage.discordMessage,
|
||||||
quotedMessageAuthorDetails,
|
quotedMessageAuthorDetails,
|
||||||
|
message.quotedMessage.albumImages,
|
||||||
|
message.quotedMessage.albumImagesCount,
|
||||||
message.albumId,
|
message.albumId,
|
||||||
if (len(message.albumId) == 0): @[] else: @[message.image],
|
if (len(message.albumId) == 0): @[] else: @[message.image],
|
||||||
if (len(message.albumId) == 0): @[] else: @[message.id],
|
if (len(message.albumId) == 0): @[] else: @[message.id],
|
||||||
|
|
|
@ -219,6 +219,8 @@ proc buildPinnedMessageItem(self: Module, message: MessageDto, actionInitiatedBy
|
||||||
message.quotedMessage.deleted,
|
message.quotedMessage.deleted,
|
||||||
message.quotedMessage.discordMessage,
|
message.quotedMessage.discordMessage,
|
||||||
quotedMessageAuthorDetails,
|
quotedMessageAuthorDetails,
|
||||||
|
message.quotedMessage.albumImages,
|
||||||
|
message.quotedMessage.albumImagesCount,
|
||||||
message.albumId,
|
message.albumId,
|
||||||
if (len(message.albumId) == 0): @[] else: @[message.image],
|
if (len(message.albumId) == 0): @[] else: @[message.image],
|
||||||
if (len(message.albumId) == 0): @[] else: @[message.id],
|
if (len(message.albumId) == 0): @[] else: @[message.id],
|
||||||
|
|
|
@ -59,6 +59,8 @@ type
|
||||||
quotedMessageAuthorDisplayName: string
|
quotedMessageAuthorDisplayName: string
|
||||||
quotedMessageAuthorAvatar: string
|
quotedMessageAuthorAvatar: string
|
||||||
quotedMessageAuthorDetails: ContactDetails
|
quotedMessageAuthorDetails: ContactDetails
|
||||||
|
quotedMessageAlbumMessageImages: seq[string]
|
||||||
|
quotedMessageAlbumImagesCount: int
|
||||||
albumId: string
|
albumId: string
|
||||||
albumMessageImages: seq[string]
|
albumMessageImages: seq[string]
|
||||||
albumMessageIds: seq[string]
|
albumMessageIds: seq[string]
|
||||||
|
@ -105,6 +107,8 @@ proc initItem*(
|
||||||
quotedMessageDeleted: bool,
|
quotedMessageDeleted: bool,
|
||||||
quotedMessageDiscordMessage: DiscordMessage,
|
quotedMessageDiscordMessage: DiscordMessage,
|
||||||
quotedMessageAuthorDetails: ContactDetails,
|
quotedMessageAuthorDetails: ContactDetails,
|
||||||
|
quotedMessageAlbumMessageImages: seq[string],
|
||||||
|
quotedMessageAlbumImagesCount: int,
|
||||||
albumId: string,
|
albumId: string,
|
||||||
albumMessageImages: seq[string],
|
albumMessageImages: seq[string],
|
||||||
albumMessageIds: seq[string],
|
albumMessageIds: seq[string],
|
||||||
|
@ -156,6 +160,8 @@ proc initItem*(
|
||||||
result.quotedMessageContentType = quotedMessageContentType
|
result.quotedMessageContentType = quotedMessageContentType
|
||||||
result.quotedMessageDeleted = quotedMessageDeleted
|
result.quotedMessageDeleted = quotedMessageDeleted
|
||||||
result.quotedMessageAuthorDetails = quotedMessageAuthorDetails
|
result.quotedMessageAuthorDetails = quotedMessageAuthorDetails
|
||||||
|
result.quotedMessageAlbumMessageImages = quotedMessageAlbumMessageImages
|
||||||
|
result.quotedMessageAlbumImagesCount = quotedMessageAlbumImagesCount
|
||||||
result.albumId = albumId
|
result.albumId = albumId
|
||||||
result.albumMessageImages = albumMessageImages
|
result.albumMessageImages = albumMessageImages
|
||||||
result.albumMessageIds = albumMessageIds
|
result.albumMessageIds = albumMessageIds
|
||||||
|
@ -232,6 +238,8 @@ proc initNewMessagesMarkerItem*(clock, timestamp: int64): Item =
|
||||||
quotedMessageDeleted = false,
|
quotedMessageDeleted = false,
|
||||||
quotedMessageDiscordMessage = DiscordMessage(),
|
quotedMessageDiscordMessage = DiscordMessage(),
|
||||||
quotedMessageAuthorDetails = ContactDetails(),
|
quotedMessageAuthorDetails = ContactDetails(),
|
||||||
|
quotedMessageAlbumMessageImages = @[],
|
||||||
|
quotedMessageAlbumImagesCount = 0,
|
||||||
albumId = "",
|
albumId = "",
|
||||||
albumMessageImages = @[],
|
albumMessageImages = @[],
|
||||||
albumMessageIds = @[],
|
albumMessageIds = @[],
|
||||||
|
@ -504,6 +512,8 @@ proc toJsonNode*(self: Item): JsonNode =
|
||||||
"quotedMessageDeleted": self.quotedMessageDeleted,
|
"quotedMessageDeleted": self.quotedMessageDeleted,
|
||||||
"quotedMessageAuthorDisplayName": self.quotedMessageAuthorDisplayName,
|
"quotedMessageAuthorDisplayName": self.quotedMessageAuthorDisplayName,
|
||||||
"quotedMessageAuthorAvatar": self.quotedMessageAuthorAvatar,
|
"quotedMessageAuthorAvatar": self.quotedMessageAuthorAvatar,
|
||||||
|
"quotedMessageAlbumMessageImages": self.quotedMessageAlbumMessageImages,
|
||||||
|
"quotedMessageAlbumImagesCount": self.quotedMessageAlbumImagesCount,
|
||||||
"albumId": self.albumId,
|
"albumId": self.albumId,
|
||||||
"albumMessageImages": self.albumMessageImages,
|
"albumMessageImages": self.albumMessageImages,
|
||||||
"albumMessageIds": self.albumMessageIds,
|
"albumMessageIds": self.albumMessageIds,
|
||||||
|
@ -581,3 +591,15 @@ proc quotedMessageAuthorDetails*(self: Item): ContactDetails {.inline.} =
|
||||||
self.quotedMessageAuthorDetails
|
self.quotedMessageAuthorDetails
|
||||||
proc `quotedMessageAuthorDetails=`*(self: Item, value: ContactDetails) {.inline.} =
|
proc `quotedMessageAuthorDetails=`*(self: Item, value: ContactDetails) {.inline.} =
|
||||||
self.quotedMessageAuthorDetails = value
|
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:
|
QtProperty[string] quotedMessageAuthorAvatar:
|
||||||
read = 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
|
proc senderId*(self: MessageItem): string {.slot.} = result = ?.self.messageItem.senderId
|
||||||
QtProperty[string] senderId:
|
QtProperty[string] senderId:
|
||||||
read = senderId
|
read = senderId
|
||||||
|
|
|
@ -62,6 +62,8 @@ type
|
||||||
QuotedMessageAuthorEnsVerified
|
QuotedMessageAuthorEnsVerified
|
||||||
QuotedMessageAuthorIsContact
|
QuotedMessageAuthorIsContact
|
||||||
QuotedMessageAuthorColorHash
|
QuotedMessageAuthorColorHash
|
||||||
|
QuotedMessageAlbumMessageImages
|
||||||
|
QuotedMessageAlbumImagesCount
|
||||||
AlbumMessageImages
|
AlbumMessageImages
|
||||||
AlbumImagesCount
|
AlbumImagesCount
|
||||||
|
|
||||||
|
@ -158,6 +160,8 @@ QtObject:
|
||||||
ModelRole.QuotedMessageAuthorEnsVerified.int: "quotedMessageAuthorEnsVerified",
|
ModelRole.QuotedMessageAuthorEnsVerified.int: "quotedMessageAuthorEnsVerified",
|
||||||
ModelRole.QuotedMessageAuthorIsContact.int: "quotedMessageAuthorIsContact",
|
ModelRole.QuotedMessageAuthorIsContact.int: "quotedMessageAuthorIsContact",
|
||||||
ModelRole.QuotedMessageAuthorColorHash.int: "quotedMessageAuthorColorHash",
|
ModelRole.QuotedMessageAuthorColorHash.int: "quotedMessageAuthorColorHash",
|
||||||
|
ModelRole.QuotedMessageAlbumMessageImages.int: "quotedMessageAlbumMessageImages",
|
||||||
|
ModelRole.QuotedMessageAlbumImagesCount.int: "quotedMessageAlbumImagesCount",
|
||||||
ModelRole.AlbumMessageImages.int: "albumMessageImages",
|
ModelRole.AlbumMessageImages.int: "albumMessageImages",
|
||||||
ModelRole.AlbumImagesCount.int: "albumImagesCount",
|
ModelRole.AlbumImagesCount.int: "albumImagesCount",
|
||||||
}.toTable
|
}.toTable
|
||||||
|
@ -253,6 +257,10 @@ QtObject:
|
||||||
result = newQVariant(item.quotedMessageAuthorDetails.dto.isContact())
|
result = newQVariant(item.quotedMessageAuthorDetails.dto.isContact())
|
||||||
of ModelRole.QuotedMessageAuthorColorHash:
|
of ModelRole.QuotedMessageAuthorColorHash:
|
||||||
result = newQVariant(item.quotedMessageAuthorDetails.colorHash)
|
result = newQVariant(item.quotedMessageAuthorDetails.colorHash)
|
||||||
|
of ModelRole.QuotedMessageAlbumMessageImages:
|
||||||
|
result = newQVariant(item.quotedMessageAlbumMessageImages.join(" "))
|
||||||
|
of ModelRole.QuotedMessageAlbumImagesCount:
|
||||||
|
result = newQVariant(item.quotedMessageAlbumImagesCount)
|
||||||
of ModelRole.MessageText:
|
of ModelRole.MessageText:
|
||||||
result = newQVariant(item.messageText)
|
result = newQVariant(item.messageText)
|
||||||
of ModelRole.UnparsedText:
|
of ModelRole.UnparsedText:
|
||||||
|
|
|
@ -64,6 +64,8 @@ type QuotedMessage* = object
|
||||||
contentType*: ContentType
|
contentType*: ContentType
|
||||||
deleted*: bool
|
deleted*: bool
|
||||||
discordMessage*: DiscordMessage
|
discordMessage*: DiscordMessage
|
||||||
|
albumImages*: seq[string]
|
||||||
|
albumImagesCount*: int
|
||||||
|
|
||||||
type Sticker* = object
|
type Sticker* = object
|
||||||
hash*: string
|
hash*: string
|
||||||
|
|
|
@ -50,6 +50,8 @@ proc createTestMessageItem(id: string, clock: int64): Item =
|
||||||
quotedMessageDeleted = false,
|
quotedMessageDeleted = false,
|
||||||
quotedMessageDiscordMessage = DiscordMessage(),
|
quotedMessageDiscordMessage = DiscordMessage(),
|
||||||
quotedMessageAuthorDetails = ContactDetails(),
|
quotedMessageAuthorDetails = ContactDetails(),
|
||||||
|
quotedMessageAlbumMessageImages = @[],
|
||||||
|
quotedMessageAlbumImagesCount = 0,
|
||||||
albumId = "",
|
albumId = "",
|
||||||
albumMessageImages = @[],
|
albumMessageImages = @[],
|
||||||
albumMessageIds = @[],
|
albumMessageIds = @[],
|
||||||
|
|
|
@ -311,6 +311,8 @@ Item {
|
||||||
quotedMessageAuthorDetailsEnsVerified: model.quotedMessageAuthorEnsVerified
|
quotedMessageAuthorDetailsEnsVerified: model.quotedMessageAuthorEnsVerified
|
||||||
quotedMessageAuthorDetailsIsContact: model.quotedMessageAuthorIsContact
|
quotedMessageAuthorDetailsIsContact: model.quotedMessageAuthorIsContact
|
||||||
quotedMessageAuthorDetailsColorHash: model.quotedMessageAuthorColorHash
|
quotedMessageAuthorDetailsColorHash: model.quotedMessageAuthorColorHash
|
||||||
|
quotedMessageAlbumMessageImages: model.quotedMessageAlbumMessageImages.split(" ")
|
||||||
|
quotedMessageAlbumImagesCount: model.quotedMessageAlbumImagesCount
|
||||||
|
|
||||||
gapFrom: model.gapFrom
|
gapFrom: model.gapFrom
|
||||||
gapTo: model.gapTo
|
gapTo: model.gapTo
|
||||||
|
|
|
@ -90,6 +90,9 @@ Loader {
|
||||||
property var album: []
|
property var album: []
|
||||||
property int albumCount: 0
|
property int albumCount: 0
|
||||||
|
|
||||||
|
property var quotedMessageAlbumMessageImages: []
|
||||||
|
property var quotedMessageAlbumImagesCount: 0
|
||||||
|
|
||||||
// External behavior changers
|
// External behavior changers
|
||||||
property bool isInPinnedPopup: false // The pinned popup limits the number of buttons shown
|
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)
|
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 qsTr("Unknown message. Try fetching more messages")
|
||||||
return root.quotedMessageText
|
return root.quotedMessageText
|
||||||
}
|
}
|
||||||
|
album: root.quotedMessageAlbumMessageImages
|
||||||
|
albumCount: root.quotedMessageAlbumImagesCount
|
||||||
messageDeleted: root.quotedMessageDeleted
|
messageDeleted: root.quotedMessageDeleted
|
||||||
contentType: d.convertContentType(root.quotedMessageContentType)
|
contentType: d.convertContentType(root.quotedMessageContentType)
|
||||||
amISender: root.quotedMessageFrom === userProfile.pubKey
|
amISender: root.quotedMessageFrom === userProfile.pubKey
|
||||||
|
|
Loading…
Reference in New Issue