From 5d67a3f5f978c4bf1f4ec91b83537148f209b4d3 Mon Sep 17 00:00:00 2001 From: Jonathan Rainville Date: Tue, 23 Mar 2021 11:57:19 -0400 Subject: [PATCH] fix: fix sending three word names mentions not working --- src/app/chat/view.nim | 15 +++++++- ui/app/AppLayouts/Chat/ChatColumn.qml | 37 +++++++++++-------- ui/app/AppLayouts/Timeline/TimelineLayout.qml | 2 +- ui/shared/status/StatusChatInput.qml | 2 +- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/app/chat/view.nim b/src/app/chat/view.nim index 3894468112..4bb33e2f0f 100644 --- a/src/app/chat/view.nim +++ b/src/app/chat/view.nim @@ -176,12 +176,23 @@ QtObject: proc plainText(self: ChatsView, input: string): string {.slot.} = result = plain_text(input) - proc sendMessage*(self: ChatsView, message: string, replyTo: string, contentType: int = ContentType.Message.int, isStatusUpdate: bool = false) {.slot.} = + proc sendMessage*(self: ChatsView, message: string, replyTo: string, contentType: int = ContentType.Message.int, isStatusUpdate: bool = false, contactsString: string = "") {.slot.} = let aliasPattern = re(r"(@[A-z][a-z]+ [A-z][a-z]* [A-z][a-z]*)", flags = {reStudy, reIgnoreCase}) let ensPattern = re(r"(@\w+(?=(\.stateofus)?\.eth))", flags = {reStudy, reIgnoreCase}) let namePattern = re(r"(@\w+)", flags = {reStudy, reIgnoreCase}) - let contacts = self.status.contacts.getContacts() + var contacts: seq[Profile] + if (contactsString == ""): + contacts = self.status.contacts.getContacts() + else: + let contactsJSON = parseJson(contactsString) + contacts = @[] + for contact in contactsJSON: + contacts.add(Profile( + address: contact["address"].str, + alias: contact["alias"].str, + ensName: contact["ensName"].str + )) let aliasMentions = findAll(message, aliasPattern) let ensMentions = findAll(message, ensPattern) diff --git a/ui/app/AppLayouts/Chat/ChatColumn.qml b/ui/app/AppLayouts/Chat/ChatColumn.qml index ef0b50bd9e..bda5481a7d 100644 --- a/ui/app/AppLayouts/Chat/ChatColumn.qml +++ b/ui/app/AppLayouts/Chat/ChatColumn.qml @@ -42,21 +42,23 @@ StackLayout { property var idMap: ({}) + property var suggestionsObj: ([]) function addSuggestionFromMessageList(i){ const contactAddr = chatsModel.messageList.getMessageData(i, "publicKey"); if(idMap[contactAddr]) return; - chatInput.suggestionsList.append({ - alias: chatsModel.messageList.getMessageData(i, "alias"), - ensName: chatsModel.messageList.getMessageData(i, "ensName"), - address: contactAddr, - identicon: chatsModel.messageList.getMessageData(i, "identicon"), - localNickname: chatsModel.messageList.getMessageData(i, "localName") - }); + suggestionsObj.push({ + alias: chatsModel.messageList.getMessageData(i, "alias"), + ensName: chatsModel.messageList.getMessageData(i, "ensName"), + address: contactAddr, + identicon: chatsModel.messageList.getMessageData(i, "identicon"), + localNickname: chatsModel.messageList.getMessageData(i, "localName") + }) + chatInput.suggestionsList.append(suggestionsObj[suggestionsObj.length - 1]); idMap[contactAddr] = true; } - function populateSuggestions(){ + function populateSuggestions() { chatInput.suggestionsList.clear() const len = chatsModel.suggestionList.rowCount() @@ -66,13 +68,16 @@ StackLayout { const contactAddr = chatsModel.suggestionList.rowData(i, "address"); if(idMap[contactAddr]) continue; const contactIndex = profileModel.contacts.list.getContactIndexByPubkey(chatsModel.suggestionList.rowData(i, "address")); - chatInput.suggestionsList.append({ - alias: chatsModel.suggestionList.rowData(i, "alias"), - ensName: chatsModel.suggestionList.rowData(i, "ensName"), - address: contactAddr, - identicon: profileModel.contacts.list.rowData(contactIndex, "thumbnailImage"), - localNickname: chatsModel.suggestionList.rowData(i, "localNickname") - }); + + suggestionsObj.push({ + alias: chatsModel.suggestionList.rowData(i, "alias"), + ensName: chatsModel.suggestionList.rowData(i, "ensName"), + address: contactAddr, + identicon: profileModel.contacts.list.rowData(contactIndex, "thumbnailImage"), + localNickname: chatsModel.suggestionList.rowData(i, "localNickname") + }) + + chatInput.suggestionsList.append(suggestionsObj[suggestionsObj.length - 1]); idMap[contactAddr] = true; } const len2 = chatsModel.messageList.rowCount(); @@ -322,7 +327,7 @@ StackLayout { let msg = chatsModel.plainText(Emoji.deparse(chatInput.textInput.text)) if (msg.length > 0){ msg = chatInput.interpretMessage(msg) - chatsModel.sendMessage(msg, chatInput.isReply ? SelectedMessage.messageId : "", Utils.isOnlyEmoji(msg) ? Constants.emojiType : Constants.messageType, false); + chatsModel.sendMessage(msg, chatInput.isReply ? SelectedMessage.messageId : "", Utils.isOnlyEmoji(msg) ? Constants.emojiType : Constants.messageType, false, JSON.stringify(suggestionsObj)); if(event) event.accepted = true sendMessageSound.stop(); Qt.callLater(sendMessageSound.play); diff --git a/ui/app/AppLayouts/Timeline/TimelineLayout.qml b/ui/app/AppLayouts/Timeline/TimelineLayout.qml index ad03065cb2..86d2448e0e 100644 --- a/ui/app/AppLayouts/Timeline/TimelineLayout.qml +++ b/ui/app/AppLayouts/Timeline/TimelineLayout.qml @@ -82,7 +82,7 @@ ScrollView { var msg = chatsModel.plainText(Emoji.deparse(statusUpdateInput.textInput.text)) if (msg.length > 0){ msg = statusUpdateInput.interpretMessage(msg) - chatsModel.sendMessage(msg, "", Utils.isOnlyEmoji(msg) ? Constants.emojiType : Constants.messageType, true); + chatsModel.sendMessage(msg, "", Utils.isOnlyEmoji(msg) ? Constants.emojiType : Constants.messageType, true, ""); statusUpdateInput.textInput.text = ""; if(event) event.accepted = true statusUpdateInput.messageSound.stop() diff --git a/ui/shared/status/StatusChatInput.qml b/ui/shared/status/StatusChatInput.qml index 6007f83492..644d252efe 100644 --- a/ui/shared/status/StatusChatInput.qml +++ b/ui/shared/status/StatusChatInput.qml @@ -78,7 +78,7 @@ Rectangle { messageInputField.insert(start, text.replace(/\n/g, "
")); } - property var interpretMessage: function (msg) { + property var interpretMessage: function (msg) { if (msg.startsWith("/shrug")) { return msg.replace("/shrug", "") + " ¯\\\\\\_(ツ)\\_/¯" }