aboutsummaryrefslogtreecommitdiff
path: root/ui/message-view.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2018-04-18 14:20:57 +0300
committerTulir Asokan <tulir@maunium.net>2018-04-18 14:46:03 +0300
commitbb36996194492db6cc17f9cfd91769f31df7003b (patch)
treea10b83a338615e5386a05d38913b3f97165b1792 /ui/message-view.go
parent3750d5007fe31b1a4d706357f43774d08944213e (diff)
Add support for sending Markdown messages
Diffstat (limited to 'ui/message-view.go')
-rw-r--r--ui/message-view.go32
1 files changed, 23 insertions, 9 deletions
diff --git a/ui/message-view.go b/ui/message-view.go
index b78f135..4b67c6a 100644
--- a/ui/message-view.go
+++ b/ui/message-view.go
@@ -162,8 +162,7 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction ifc.Messag
oldMsg, messageExists := view.messageIDs[message.ID()]
if messageExists {
- oldMsg.CopyFrom(message)
- message = oldMsg
+ view.replaceMessage(oldMsg, message)
direction = ifc.IgnoreMessage
}
@@ -181,8 +180,10 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction ifc.Messag
view.appendBuffer(message)
} else if direction == ifc.PrependMessage {
view.messages = append([]messages.UIMessage{message}, view.messages...)
+ } else if oldMsg != nil {
+ view.replaceBuffer(oldMsg, message)
} else {
- view.replaceBuffer(message)
+ view.replaceBuffer(message, message)
}
view.messageIDs[message.ID()] = message
@@ -207,11 +208,20 @@ func (view *MessageView) appendBuffer(message messages.UIMessage) {
view.prevMsgCount++
}
-func (view *MessageView) replaceBuffer(message messages.UIMessage) {
+func (view *MessageView) replaceMessage(original messages.UIMessage, new messages.UIMessage) {
+ view.messageIDs[new.ID()] = new
+ for index, msg := range view.messages {
+ if msg == original {
+ view.messages[index] = new
+ }
+ }
+}
+
+func (view *MessageView) replaceBuffer(original messages.UIMessage, new messages.UIMessage) {
start := -1
end := -1
for index, meta := range view.metaBuffer {
- if meta == message {
+ if meta == original {
if start == -1 {
start = index
}
@@ -225,13 +235,17 @@ func (view *MessageView) replaceBuffer(message messages.UIMessage) {
end++
}
- view.textBuffer = append(append(view.textBuffer[0:start], message.Buffer()...), view.textBuffer[end:]...)
- if len(message.Buffer()) != end-start+1 {
+ view.textBuffer = append(append(view.textBuffer[0:start], new.Buffer()...), view.textBuffer[end:]...)
+ if len(new.Buffer()) != end-start+1 {
metaBuffer := view.metaBuffer[0:start]
- for range message.Buffer() {
- metaBuffer = append(metaBuffer, message)
+ for range new.Buffer() {
+ metaBuffer = append(metaBuffer, new)
}
view.metaBuffer = append(metaBuffer, view.metaBuffer[end:]...)
+ } else {
+ for i := start; i < end; i++ {
+ view.metaBuffer[i] = new
+ }
}
}