diff --git a/src/app/chat/view.nim b/src/app/chat/view.nim index f6e65f072d..9400ffc38d 100644 --- a/src/app/chat/view.nim +++ b/src/app/chat/view.nim @@ -595,6 +595,7 @@ QtObject: proc updateChats*(self: ChatsView, chats: seq[Chat]) = for chat in chats: if (chat.communityId != ""): + self.communities.updateCommunityChat(chat) return self.upsertChannel(chat.id) self.chats.updateChat(chat) diff --git a/src/app/chat/views/communities.nim b/src/app/chat/views/communities.nim index e86f75cf2b..6a2416ac82 100644 --- a/src/app/chat/views/communities.nim +++ b/src/app/chat/views/communities.nim @@ -39,6 +39,25 @@ QtObject: result.joinedCommunityList = newCommunityList(status) result.setup + proc updateCommunityChat*(self: CommunitiesView, newChat: Chat) = + var community = self.joinedCommunityList.getCommunityById(newChat.communityId) + if (community.id == ""): + return + var i = 0 + var found = false + for chat in community.chats: + if (chat.id == newChat.id): + community.chats[i] = newChat + found = true + i = i + 1 + if (not found): + community.chats.add(newChat) + + self.joinedCommunityList.replaceCommunity(community) + if (self.activeCommunity.active and self.activeCommunity.communityItem.id == community.id): + self.activeCommunity.changeChats(community.chats) + + proc pendingRequestsToJoinForCommunity*(self: CommunitiesView, communityId: string): seq[CommunityMembershipRequest] = result = self.status.chat.pendingRequestsToJoinForCommunity(communityId) diff --git a/src/app/chat/views/community_item.nim b/src/app/chat/views/community_item.nim index d98182f7af..652ea92529 100644 --- a/src/app/chat/views/community_item.nim +++ b/src/app/chat/views/community_item.nim @@ -123,11 +123,19 @@ QtObject: read = nbMembers notify = nbMembersChanged + proc chatsChanged*(self: CommunityItemView) {.signal.} + proc getChats*(self: CommunityItemView): QVariant {.slot.} = result = newQVariant(self.chats) + proc changeChats*(self: CommunityItemView, chats: seq[Chat]) = + self.communityItem.chats = chats + self.chats.setChats(chats) + self.chatsChanged() + QtProperty[QVariant] chats: read = getChats + notify = chatsChanged proc getMembers*(self: CommunityItemView): QVariant {.slot.} = result = newQVariant(self.members) diff --git a/src/status/chat/utils.nim b/src/status/chat/utils.nim index a2c32d46e9..7563be08c2 100644 --- a/src/status/chat/utils.nim +++ b/src/status/chat/utils.nim @@ -4,12 +4,12 @@ proc formatChatUpdate(response: JsonNode): (seq[Chat], seq[Message]) = var chats: seq[Chat] = @[] var messages: seq[Message] = @[] let pk = status_settings.getSetting[string](Setting.PublicKey, "0x0") - if response["result"]{"chats"} != nil: + if response["result"]{"messages"} != nil: for jsonMsg in response["result"]["messages"]: messages.add(jsonMsg.toMessage(pk)) if response["result"]{"chats"} != nil: for jsonChat in response["result"]["chats"]: - chats.add(jsonChat.toChat) + chats.add(jsonChat.toChat) result = (chats, messages) proc processChatUpdate(self: ChatModel, response: JsonNode): (seq[Chat], seq[Message]) = diff --git a/src/status/signals/messages.nim b/src/status/signals/messages.nim index 8f1c0f6dad..44ad22f328 100644 --- a/src/status/signals/messages.nim +++ b/src/status/signals/messages.nim @@ -46,10 +46,9 @@ proc fromEvent*(event: JsonNode): Signal = if event["event"]{"chats"} != nil: for jsonChat in event["event"]["chats"]: var chat = jsonChat.toChat - if (chat.communityId == ""): - if chatsWithMentions.contains(chat.id): - chat.hasMentions = true - signal.chats.add(chat) + if chatsWithMentions.contains(chat.id): + chat.hasMentions = true + signal.chats.add(chat) if event["event"]{"installations"} != nil: for jsonInstallation in event["event"]["installations"]: diff --git a/ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml b/ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml index a80735601b..e3b6763b9b 100644 --- a/ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml +++ b/ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml @@ -174,8 +174,8 @@ Rectangle { channelContextMenu.openMenu(chatsModel.contextChannel, index) return; } - chatsModel.setActiveChannelByIndex(index) chatGroupsListView.currentIndex = index + chatsModel.setActiveChannelByIndex(index) } }