From f47fda6d6887533e41eb226f65c0a7bc2e4d58bb Mon Sep 17 00:00:00 2001 From: Pascal Precht Date: Wed, 26 Aug 2020 12:53:41 +0200 Subject: [PATCH] fix(Chat): ensure new active channel messages are marked as seen Also, selecting a channel with unread messages marks them as seen as well Closes #738 --- src/app/chat/view.nim | 3 +++ src/status/chat.nim | 6 ++++++ src/status/libstatus/chat.nim | 3 +++ 3 files changed, 12 insertions(+) diff --git a/src/app/chat/view.nim b/src/app/chat/view.nim index e33c2d4b09..c2ff582f85 100644 --- a/src/app/chat/view.nim +++ b/src/app/chat/view.nim @@ -177,6 +177,7 @@ QtObject: self.activeChannel.setChatItem(selectedChannel) self.status.chat.setActiveChannel(selectedChannel.id) + discard self.status.chat.markAllChannelMessagesRead(selectedChannel.id) self.currentSuggestions.setNewData(self.status.contacts.getContacts()) self.activeChannelChanged() @@ -207,6 +208,7 @@ QtObject: proc setActiveChannel*(self: ChatsView, channel: string) {.slot.} = if(channel == ""): return self.activeChannel.setChatItem(self.chats.getChannel(self.chats.chats.findIndexById(channel))) + discard self.status.chat.markAllChannelMessagesRead(self.activeChannel.id) self.currentSuggestions.setNewData(self.status.contacts.getContacts()) self.activeChannelChanged() @@ -253,6 +255,7 @@ QtObject: if not channel.muted: self.messageNotificationPushed(msg.chatId, msg.text, msg.messageType, channel.chatType.int, msg.timestamp, msg.identicon, msg.alias) else: + discard self.status.chat.markMessagesSeen(msg.chatId, @[msg.id]) self.newMessagePushed() proc messageEmojiReactionId(self: ChatsView, chatId: string, messageId: string, emojiId: int): string = diff --git a/src/status/chat.nim b/src/status/chat.nim index 1f9c535c89..fa97f084da 100644 --- a/src/status/chat.nim +++ b/src/status/chat.nim @@ -292,6 +292,12 @@ proc markAllChannelMessagesRead*(self: ChatModel, chatId: string): JsonNode = self.channels[chatId].unviewedMessagesCount = 0 self.events.emit("channelUpdate", ChatUpdateArgs(messages: @[], chats: @[self.channels[chatId]], contacts: @[])) +proc markMessagesSeen*(self: ChatModel, chatId: string, messageIds: seq[string]): JsonNode = + var response = status_chat.markMessagesSeen(chatId, messageIds) + result = parseJson(response) + if self.channels.hasKey(chatId): + self.channels[chatId].unviewedMessagesCount = 0 + self.events.emit("channelUpdate", ChatUpdateArgs(messages: @[], chats: @[self.channels[chatId]], contacts: @[])) proc confirmJoiningGroup*(self: ChatModel, chatId: string) = var response = status_chat.confirmJoiningGroup(chatId) diff --git a/src/status/libstatus/chat.nim b/src/status/libstatus/chat.nim index 5f93abb9c0..3242976c61 100644 --- a/src/status/libstatus/chat.nim +++ b/src/status/libstatus/chat.nim @@ -154,6 +154,9 @@ proc sendStickerMessage*(chatId: string, sticker: Sticker): string = proc markAllRead*(chatId: string): string = callPrivateRPC("markAllRead".prefix, %* [chatId]) +proc markMessagesSeen*(chatId: string, messageIds: seq[string]): string = + callPrivateRPC("markMessagesSeen".prefix, %* [chatId, messageIds]) + proc confirmJoiningGroup*(chatId: string): string = callPrivateRPC("confirmJoiningGroup".prefix, %* [chatId])