From 84df214f6f916aad6abb6ff7d2ea4d49b9010d7b Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Fri, 28 Aug 2020 13:35:01 -0400 Subject: [PATCH] fix: handle message reactions for old messages not loaded --- src/app/chat/view.nim | 11 +++++------ src/app/chat/views/message_list.nim | 10 ++++++++-- src/status/chat/message.nim | 1 - 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/app/chat/view.nim b/src/app/chat/view.nim index c663bfab53..8ddcc0d948 100644 --- a/src/app/chat/view.nim +++ b/src/app/chat/view.nim @@ -259,11 +259,10 @@ QtObject: self.newMessagePushed() proc messageEmojiReactionId(self: ChatsView, chatId: string, messageId: string, emojiId: int): string = - let message = self.messageList[chatId].getMessageById(messageId) - if (message.emojiReactions == "") : + if (self.messageList[chatId].getReactions(messageId) == "") : return "" - let oldReactions = parseJson(message.emojiReactions) + let oldReactions = parseJson(self.messageList[chatId].getReactions(messageId)) for pair in oldReactions.pairs: if (pair[1]["emojiId"].getInt == emojiId and pair[1]["from"].getStr == self.pubKey): @@ -281,12 +280,12 @@ QtObject: let t = reactions.len for reaction in reactions.mitems: let messageList = self.messageList[reaction.chatId] - var message = messageList.getMessageById(reaction.messageId) + var emojiReactions = messageList.getReactions(reaction.messageId) var oldReactions: JsonNode - if (message.emojiReactions == "") : + if (emojiReactions == "") : oldReactions = %*{} else: - oldReactions = parseJson(message.emojiReactions) + oldReactions = parseJson(emojiReactions) if (oldReactions.hasKey(reaction.id)): if (reaction.retracted): diff --git a/src/app/chat/views/message_list.nim b/src/app/chat/views/message_list.nim index b477a55420..d70cfd25f2 100644 --- a/src/app/chat/views/message_list.nim +++ b/src/app/chat/views/message_list.nim @@ -38,6 +38,7 @@ QtObject: messages*: seq[Message] status: Status messageIndex: Table[string, int] + messageReactions*: Table[string, string] timedoutMessages: HashSet[string] proc delete(self: ChatMessageList) = @@ -87,6 +88,10 @@ QtObject: method rowCount(self: ChatMessageList, index: QModelIndex = nil): int = return self.messages.len + proc getReactions*(self:ChatMessageList, messageId: string):string = + if not self.messageReactions.hasKey(messageId): return "" + result = self.messageReactions[messageId] + method data(self: ChatMessageList, index: QModelIndex, role: int): QVariant = if not index.isValid: return @@ -116,7 +121,7 @@ QtObject: of ChatMessageRoles.Image: result = newQVariant(message.image) of ChatMessageRoles.Audio: result = newQVariant(message.audio) of ChatMessageRoles.AudioDurationMs: result = newQVariant(message.audioDurationMs) - of ChatMessageRoles.EmojiReactions: result = newQVariant(message.emojiReactions) + of ChatMessageRoles.EmojiReactions: result = newQVariant(self.getReactions(message.id)) method roleNames(self: ChatMessageList): Table[int, string] = { @@ -188,8 +193,9 @@ QtObject: self.endResetModel() proc setMessageReactions*(self: ChatMessageList, messageId: string, newReactions: string)= + self.messageReactions[messageId] = newReactions + if not self.messageIndex.hasKey(messageId): return let msgIdx = self.messageIndex[messageId] - self.messages[msgIdx].emojiReactions = newReactions let topLeft = self.createIndex(msgIdx, 0, nil) let bottomRight = self.createIndex(msgIdx, 0, nil) self.dataChanged(topLeft, bottomRight, @[ChatMessageRoles.EmojiReactions.int]) diff --git a/src/status/chat/message.nim b/src/status/chat/message.nim index a3b4f696aa..6ba3adb7c4 100644 --- a/src/status/chat/message.nim +++ b/src/status/chat/message.nim @@ -48,7 +48,6 @@ type Message* = object image*: string audio*: string audioDurationMs*: int - emojiReactions*: string type Reaction* = object id*: string