From 1bca5ee174b8d7d47f22d21884dcb9a463718051 Mon Sep 17 00:00:00 2001 From: Pascal Precht Date: Wed, 15 Sep 2021 12:51:31 +0200 Subject: [PATCH] fix(@desktop/chat): ensure replacement of mentions with pubkey works in communities There were two issues why mentions didn't work in communities: 1. The function that replaces mentions with pubkey looked in the wrong place 2. The same function always prepented `userName` with `@` which isn't always necessary This commit fix this by ensuring the replacement function looks in the community memberlist instead of a messageList and also by checking if a `userName` already starts with a `@` and only prepends it if not. Fixes #3492 --- src/app/chat/views/community_members_list.nim | 6 +++++ src/app/chat/views/messages.nim | 26 ++++++++++++++----- src/app/chat/views/user_list.nim | 2 +- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/app/chat/views/community_members_list.nim b/src/app/chat/views/community_members_list.nim index c6094a6de8..e187b1f85e 100644 --- a/src/app/chat/views/community_members_list.nim +++ b/src/app/chat/views/community_members_list.nim @@ -1,6 +1,7 @@ import NimQml, Tables import status/[chat/chat, ens, status, settings] import status/types/[setting, status_update] +import user_list type CommunityMembersRoles {.pure.} = enum @@ -100,6 +101,11 @@ QtObject: if self.community.memberStatus.hasKey(pk): result = self.community.memberStatus[pk].statusType.int == StatusUpdateType.Online.int + proc getUserFromPubKey*(self: CommunityMembersView, pk: string): User = + let alias = self.alias(pk) + let userName = self.userName(pk, alias) + result = User(alias: alias, userName: userName) + proc sortKey(self: CommunityMembersView, pk: string): string = let name = self.userName(pk, self.alias(pk)) if self.isOnline(pk): diff --git a/src/app/chat/views/messages.nim b/src/app/chat/views/messages.nim index db2ce3d013..24d6f67e4e 100644 --- a/src/app/chat/views/messages.nim +++ b/src/app/chat/views/messages.nim @@ -9,7 +9,7 @@ import ../../../app_service/[main] import ../../../app_service/tasks/[qt, threadpool] import ../../../app_service/tasks/marathon/mailserver/worker -import communities, chat_item, channels_list, communities, message_list, channel, message_item +import communities, chat_item, channels_list, communities, community_list, user_list, community_members_list, message_list, channel, message_item logScope: topics = "messages-view" @@ -76,8 +76,22 @@ QtObject: let nameMentions = findAll(message, namePattern) var updatedMessage = message - for publicKey in self.messageList[self.channelView.activeChannel.id].userList.users: - let user = self.messageList[self.channelView.activeChannel.id].userList.userDetails[publicKey] + var userList = self.messageList[self.channelView.activeChannel.id].userList.users + + if self.communities.activeCommunity.active: + userList = self.communities.activeCommunity.members.community.members + + for publicKey in userList: + + var user = if self.communities.activeCommunity.active: + self.communities.activeCommunity.members.getUserFromPubKey(publicKey) + else: + self.messageList[self.channelView.activeChannel.id].userList.userDetails[publicKey] + + let userName = if user.userName.startsWith('@'): + user.userName + else: + "@" & user.userName for mention in aliasMentions: if "@" & user.alias.toLowerAscii != mention.toLowerAscii: @@ -86,13 +100,13 @@ QtObject: updatedMessage = updatedMessage.replaceWord(mention, '@' & publicKey) for mention in ensMentions: - if "@" & user.userName.toLowerAscii != mention.toLowerAscii: + if userName.toLowerAscii != mention.toLowerAscii: continue updatedMessage = updatedMessage.replaceWord(mention, '@' & publicKey) for mention in nameMentions: - if "@" & user.userName.split(".")[0].toLowerAscii != mention.toLowerAscii: + if userName.split(".")[0].toLowerAscii != mention.toLowerAscii: continue updatedMessage = updatedMessage.replaceWord(mention, '@' & publicKey) @@ -490,4 +504,4 @@ QtObject: "alias": message.alias, "from": message.fromAuthor }) - writeFile(url_toLocalFile(filePath), $messages) \ No newline at end of file + writeFile(url_toLocalFile(filePath), $messages) diff --git a/src/app/chat/views/user_list.nim b/src/app/chat/views/user_list.nim index 5380232f4d..5677073279 100644 --- a/src/app/chat/views/user_list.nim +++ b/src/app/chat/views/user_list.nim @@ -17,7 +17,7 @@ type LocalName = UserRole + 5 Identicon = UserRole + 6 - User = object + User* = object username*: string alias*: string localName: string