diff --git a/src/app/chat/view.nim b/src/app/chat/view.nim
index 64a9fba05f..2c1c354b3d 100644
--- a/src/app/chat/view.nim
+++ b/src/app/chat/view.nim
@@ -76,23 +76,8 @@ QtObject:
proc getChannelColor*(self: ChatsView, channel: string): string {.slot.} =
self.chats.getChannelColor(channel)
- proc replyAreaEnabled*(self: ChatsView, enable: bool, userName: string, message: string, identicon: string) {.signal.}
-
- proc setReplyTo(self: ChatsView, messageId: string) {.slot.} =
- self.replyTo = messageId
-
- proc enableReplyArea*(self: ChatsView, enable: bool, userName: string = "", message: string = "", identicon: string = "") {.slot.} =
- if not enable:
- self.replyTo = ""
- self.replyAreaEnabled(enable, username, message, identicon)
-
- proc disableReplyArea(self: ChatsView) =
- self.replyTo = ""
- self.replyAreaEnabled(false, "", "", "")
-
- proc sendMessage*(self: ChatsView, message: string, isReply: bool) {.slot.} =
- self.status.chat.sendMessage(self.activeChannel.id, message, if isReply: self.replyTo else: "")
- self.disableReplyArea()
+ proc sendMessage*(self: ChatsView, message: string, replyTo: string) {.slot.} =
+ self.status.chat.sendMessage(self.activeChannel.id, message, replyTo)
proc activeChannelChanged*(self: ChatsView) {.signal.}
@@ -105,7 +90,6 @@ QtObject:
if self.activeChannel.id == selectedChannel.id: return
self.activeChannel.setChatItem(selectedChannel)
self.status.chat.setActiveChannel(selectedChannel.id)
- self.disableReplyArea()
self.activeChannelChanged()
proc getActiveChannelIdx(self: ChatsView): QVariant {.slot.} =
@@ -135,7 +119,6 @@ QtObject:
proc setActiveChannel*(self: ChatsView, channel: string) =
if(channel == ""): return
self.activeChannel.setChatItem(self.chats.getChannel(self.chats.chats.findIndexById(channel)))
- self.disableReplyArea()
self.activeChannelChanged()
proc getActiveChannel*(self: ChatsView): QVariant {.slot.} =
@@ -150,8 +133,9 @@ QtObject:
if not self.messageList.hasKey(channel):
self.messageList[channel] = newChatMessageList(channel, self.status)
# If there is only one channel, set is as active
- if (self.activeChannel.chatItem == nil and self.chats.rowCount() == 1):
- self.setActiveChannelByIndex(0)
+ # if (self.activeChannel.chatItem == nil and self.chats.rowCount() == 1):
+ # self.setActiveChannelByIndex(0)
+ # RRAMOS: commented because it was hanging the app on login
proc messagePushed*(self: ChatsView) {.signal.}
diff --git a/src/app/chat/views/message_format.nim b/src/app/chat/views/message_format.nim
index 3632b13d20..2999340a19 100644
--- a/src/app/chat/views/message_format.nim
+++ b/src/app/chat/views/message_format.nim
@@ -28,7 +28,7 @@ proc renderBlock(self: ChatMessageList, message: Message): string =
for pMsg in message.parsedText:
case pMsg.textType:
of "paragraph":
- result = "
"
+ result = result & "
"
for children in pMsg.children:
result = result & self.renderInline(children)
result = result & "
"
@@ -37,5 +37,5 @@ proc renderBlock(self: ChatMessageList, message: Message): string =
var color = if message.isCurrentUser: "#FFFFFF" else: "#666666"
result = result & fmt("▍ ") & pMsg.literal & ""
of "codeblock":
- result = ""
+ result = result & ""
result = result.replace("\n", "
")
\ No newline at end of file
diff --git a/src/app/chat/views/message_list.nim b/src/app/chat/views/message_list.nim
index 326bb5f25c..a7e94b87d1 100644
--- a/src/app/chat/views/message_list.nim
+++ b/src/app/chat/views/message_list.nim
@@ -80,7 +80,6 @@ QtObject:
of ChatMessageRoles.Id: result = newQVariant(message.id)
of ChatMessageRoles.OutgoingStatus: result = newQVariant(message.outgoingStatus)
of ChatMessageRoles.ResponseTo: result = newQVariant(message.responseTo)
- of ChatMessageRoles.Text: result = newQVariant(message.text)
method roleNames(self: ChatMessageList): Table[int, string] =
{
@@ -98,8 +97,7 @@ QtObject:
ChatMessageRoles.SectionIdentifier.int: "sectionIdentifier",
ChatMessageRoles.Id.int: "messageId",
ChatMessageRoles.OutgoingStatus.int: "outgoingStatus",
- ChatMessageRoles.ResponseTo.int: "responseTo",
- ChatMessageRoles.Text.int: "text"
+ ChatMessageRoles.ResponseTo.int: "responseTo"
}.toTable
proc getMessageIndex(self: ChatMessageList, messageId: string): int {.slot.} =
@@ -111,6 +109,7 @@ QtObject:
case data:
of "userName": result = message.alias
of "message": result = message.text
+ of "identicon": result = message.identicon
else: result = ""
proc add*(self: ChatMessageList, message: Message) =
diff --git a/ui/app/AppLayouts/Chat/ChatColumn.qml b/ui/app/AppLayouts/Chat/ChatColumn.qml
index 044c9decfa..90fd1e49d3 100644
--- a/ui/app/AppLayouts/Chat/ChatColumn.qml
+++ b/ui/app/AppLayouts/Chat/ChatColumn.qml
@@ -53,7 +53,10 @@ StackLayout {
}
Action {
text: qsTr("Reply to")
- onTriggered: chatsModel.enableReplyArea(true, profilePopup.userName, profilePopup.text, profilePopup.identicon)
+ onTriggered: {
+ isReply = true;
+ replyAreaContainer.setup()
+ }
}
}
@@ -69,28 +72,18 @@ StackLayout {
ReplyArea {
- id: replyArea
+ id: replyAreaContainer
visible: isReply
}
ChatInput {
height: 40
- anchors.top: !isReply ? inputArea.top : replyArea.bottom
+ anchors.top: !isReply ? inputArea.top : replyAreaContainer.bottom
anchors.topMargin: 4
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
}
-
- Connections {
- target: chatsModel
- onReplyAreaEnabled: {
- isReply = enable;
- replyArea.userName = userName;
- replyArea.identicon = identicon;
- replyArea.message = message;
- }
- }
}
}
diff --git a/ui/app/AppLayouts/Chat/ChatColumn/ChatButtons.qml b/ui/app/AppLayouts/Chat/ChatColumn/ChatButtons.qml
index d635bf2c52..5d08b6256f 100644
--- a/ui/app/AppLayouts/Chat/ChatColumn/ChatButtons.qml
+++ b/ui/app/AppLayouts/Chat/ChatColumn/ChatButtons.qml
@@ -23,7 +23,7 @@ Item {
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
onClicked: {
- chatsModel.sendMessage(txtData.text, chatColumn.isReply)
+ chatsModel.sendMessage(txtData.text, SelectedMessage.messageId)
txtData.text = ""
}
background: Rectangle {
diff --git a/ui/app/AppLayouts/Chat/ChatColumn/ChatInput.qml b/ui/app/AppLayouts/Chat/ChatColumn/ChatInput.qml
index ac23795ef7..2aa2bbd858 100644
--- a/ui/app/AppLayouts/Chat/ChatColumn/ChatInput.qml
+++ b/ui/app/AppLayouts/Chat/ChatColumn/ChatInput.qml
@@ -33,7 +33,7 @@ Rectangle {
if (event.modifiers === Qt.NoModifier && (event.key === Qt.Key_Enter || event.key === Qt.Key_Return)) {
if(txtData.text.trim().length > 0){
let msg = interpretMessage(txtData.text.trim())
- chatsModel.sendMessage(msg, chatColumn.isReply);
+ chatsModel.sendMessage(msg, SelectedMessage.messageId);
txtData.text = "";
event.accepted = true;
sendMessageSound.stop()
diff --git a/ui/app/AppLayouts/Chat/ChatColumn/ChatMessages.qml b/ui/app/AppLayouts/Chat/ChatColumn/ChatMessages.qml
index 874af5a6ac..f818d08895 100644
--- a/ui/app/AppLayouts/Chat/ChatColumn/ChatMessages.qml
+++ b/ui/app/AppLayouts/Chat/ChatColumn/ChatMessages.qml
@@ -39,12 +39,6 @@ ScrollView {
Qt.callLater( chatLogView.positionViewAtEnd )
}
- onReplyAreaEnabled: {
- if (enable){
- Qt.callLater( chatLogView.positionViewAtEnd )
- }
- }
-
onMessagePushed: {
if (!chatLogView.atYEnd) {
// User has scrolled up, we don't want to scroll back
diff --git a/ui/app/AppLayouts/Chat/ChatColumn/Message.qml b/ui/app/AppLayouts/Chat/ChatColumn/Message.qml
index 582ad29195..9b326766d1 100644
--- a/ui/app/AppLayouts/Chat/ChatColumn/Message.qml
+++ b/ui/app/AppLayouts/Chat/ChatColumn/Message.qml
@@ -206,8 +206,8 @@ Item {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: {
- chatsModel.setReplyTo(messageId)
- profileClick(userName, fromAuthor, identicon, text);
+ SelectedMessage.set(messageId, fromAuthor);
+ profileClick(userName, fromAuthor, identicon);
messageContextMenu.popup()
}
}
@@ -230,8 +230,8 @@ Item {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: {
- chatsModel.setReplyTo(messageId)
- profileClick(userName, fromAuthor, identicon, text)
+ SelectedMessage.set(messageId, fromAuthor);
+ profileClick(userName, fromAuthor, identicon)
messageContextMenu.popup()
}
}
@@ -317,10 +317,11 @@ Item {
text: {
if(contentType === Constants.stickerType) return "";
if(isEmoji){
- return Emoji.parse(message, "72x72");
+ return Emoji.parse(linkify(message), "72x72");
} else {
return Emoji.parse(linkify(message), "26x26");
}
+
}
anchors.left: parent.left
anchors.leftMargin: parent.chatHorizontalPadding
@@ -353,7 +354,15 @@ Item {
MouseArea {
anchors.fill: parent
cursorShape: chatText.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: {
+ if(mouse.button & Qt.RightButton) {
+ SelectedMessage.set(messageId, fromAuthor);
+ profileClick(userName, fromAuthor, identicon);
+ messageContextMenu.popup()
+ return;
+ }
+
let link = chatText.hoveredLink;
if(link.startsWith("#")){
chatsModel.joinChat(link.substring(1), Constants.chatTypePublic);
@@ -362,17 +371,12 @@ Item {
if (link.startsWith('//')) {
let pk = link.replace("//", "");
- profileClick(chatsModel.userNameOrAlias(pk), pk, chatsModel.generateIdenticon(pk), text)
+ profileClick(chatsModel.userNameOrAlias(pk), pk, chatsModel.generateIdenticon(pk))
return;
}
Qt.openUrlExternally(link)
}
- onPressAndHold: {
- chatsModel.setReplyTo(messageId)
- profileClick(userName, fromAuthor, identicon, text);
- messageContextMenu.popup()
- }
}
}
diff --git a/ui/app/AppLayouts/Chat/ChatColumn/ReplyArea.qml b/ui/app/AppLayouts/Chat/ChatColumn/ReplyArea.qml
index 99bac3425e..cef2f25f61 100644
--- a/ui/app/AppLayouts/Chat/ChatColumn/ReplyArea.qml
+++ b/ui/app/AppLayouts/Chat/ChatColumn/ReplyArea.qml
@@ -7,7 +7,7 @@ import "./"
Rectangle {
property string userName: "Joseph Joestar"
- property string message: "Your next line is: is this is a Jojo reference?"
+ property string message: "Your next line is: this is a Jojo reference"
property string identicon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="
id: replyArea
@@ -17,6 +17,21 @@ Rectangle {
anchors.top: parent.top
color: "#00000000"
+ function setup(){
+ let replyMessageIndex = chatsModel.messageList.getMessageIndex(SelectedMessage.messageId);
+ if (replyMessageIndex == -1) return;
+
+ userName = chatsModel.messageList.getReplyData(replyMessageIndex, "userName")
+ message = chatsModel.messageList.getReplyData(replyMessageIndex, "message")
+ identicon = chatsModel.messageList.getReplyData(replyMessageIndex, "identicon")
+ }
+
+ function reset(){
+ userName = "";
+ message= "";
+ identicon = "";
+ }
+
Rectangle {
id: closeButton
height: 32
@@ -37,7 +52,7 @@ Rectangle {
}
MouseArea {
- id: closeModalMouseArea
+ id: closeReplyArea
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
hoverEnabled: true
@@ -47,7 +62,10 @@ Rectangle {
onEntered: {
closeButton.color = Style.current.grey
}
- onClicked: chatsModel.enableReplyArea(false, "","","")
+ onClicked: {
+ reset();
+ chatColumn.isReply = false;
+ }
}
}
diff --git a/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml b/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml
index dc237247e5..4258737cfd 100644
--- a/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml
+++ b/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml
@@ -61,6 +61,8 @@ Item {
target: chatsModel
onActiveChannelChanged: {
chatGroupsListView.currentIndex = chatsModel.activeChannelIndex
+ SelectedMessage.reset();
+ chatColumn.isReply = false;
}
}
}
diff --git a/ui/imports/SelectedMessage.qml b/ui/imports/SelectedMessage.qml
new file mode 100644
index 0000000000..0c9500a4fc
--- /dev/null
+++ b/ui/imports/SelectedMessage.qml
@@ -0,0 +1,18 @@
+pragma Singleton
+
+import QtQuick 2.13
+
+QtObject {
+ property string messageId: ""
+ property string author: ""
+
+ function reset(){
+ messageId = "";
+ author = "";
+ }
+
+ function set(_messageId, _author){
+ messageId = _messageId;
+ author = _author;
+ }
+}
\ No newline at end of file
diff --git a/ui/imports/qmldir b/ui/imports/qmldir
index f1e381e234..08f137f4e8 100644
--- a/ui/imports/qmldir
+++ b/ui/imports/qmldir
@@ -3,3 +3,4 @@ singleton Style 1.0 ./Style.qml
singleton Constants 1.0 ./Constants.qml
singleton Utils 1.0 ./Utils.qml
singleton Emoji 1.0 ./Emoji.qml
+singleton SelectedMessage 1.0 ./SelectedMessage.qml