aboutsummaryrefslogtreecommitdiff
path: root/ui/message-view.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2020-02-20 21:56:03 +0200
committerTulir Asokan <tulir@maunium.net>2020-02-20 21:56:03 +0200
commitdb1424a06d2274f0321991660312445829df13c9 (patch)
tree47da36262279c77c05d3158a02b5b7cbf6cc1777 /ui/message-view.go
parentdb7d2da50cd0f4c20bc0966bff7c388c017e182f (diff)
Add support for displaying reactions
Diffstat (limited to 'ui/message-view.go')
-rw-r--r--ui/message-view.go54
1 files changed, 32 insertions, 22 deletions
diff --git a/ui/message-view.go b/ui/message-view.go
index 9d67c7b..20ee149 100644
--- a/ui/message-view.go
+++ b/ui/message-view.go
@@ -284,11 +284,16 @@ func (view *MessageView) replaceBuffer(original *messages.UIMessage, new *messag
view.msgBufferLock.Lock()
if new.Height() != end-start {
- metaBuffer := view.msgBuffer[0:start]
- for i := 0; i < new.Height(); i++ {
- metaBuffer = append(metaBuffer, new)
+ height := new.Height()
+
+ newBuffer := make([]*messages.UIMessage, height + len(view.msgBuffer) - end)
+ for i := 0; i < height; i++ {
+ newBuffer[i] = new
+ }
+ for i := height; i < len(newBuffer); i++ {
+ newBuffer[i] = view.msgBuffer[end + (i - height)]
}
- view.msgBuffer = append(metaBuffer, view.msgBuffer[end:]...)
+ view.msgBuffer = append(view.msgBuffer[0:start], newBuffer...)
} else {
for i := start; i < end; i++ {
view.msgBuffer[i] = new
@@ -594,33 +599,38 @@ func (view *MessageView) Draw(screen mauview.Screen) {
var prevMsg *messages.UIMessage
view.msgBufferLock.RLock()
- for line := viewStart; line < height && indexOffset+line < len(view.msgBuffer); line++ {
+ for line := viewStart; line < height && indexOffset+line < len(view.msgBuffer); {
index := indexOffset + line
msg := view.msgBuffer[index]
- if msg != prevMsg {
- if len(msg.FormatTime()) > 0 {
- widget.WriteLineSimpleColor(screen, msg.FormatTime(), 0, line, msg.TimestampColor())
- }
- // TODO hiding senders might not be that nice after all, maybe an option? (disabled for now)
- //if !bareMode && (prevMsg == nil || meta.Sender() != prevMsg.Sender()) {
- widget.WriteLineColor(
- screen, mauview.AlignRight, msg.Sender(),
- usernameX, line, view.widestSender(),
- msg.SenderColor())
- //}
- if msg.Edited {
- // TODO add better indicator for edits
- screen.SetCell(usernameX + view.widestSender(), line, tcell.StyleDefault.Foreground(tcell.ColorDarkRed), '*')
- }
- prevMsg = msg
+ if msg == prevMsg {
+ debug.Print("Unexpected re-encounter of", msg, msg.Height(), "at", line, index)
+ line++
+ continue
+ }
+
+ if len(msg.FormatTime()) > 0 {
+ widget.WriteLineSimpleColor(screen, msg.FormatTime(), 0, line, msg.TimestampColor())
+ }
+ // TODO hiding senders might not be that nice after all, maybe an option? (disabled for now)
+ //if !bareMode && (prevMsg == nil || meta.Sender() != prevMsg.Sender()) {
+ widget.WriteLineColor(
+ screen, mauview.AlignRight, msg.Sender(),
+ usernameX, line, view.widestSender(),
+ msg.SenderColor())
+ //}
+ if msg.Edited {
+ // TODO add better indicator for edits
+ screen.SetCell(usernameX+view.widestSender(), line, tcell.StyleDefault.Foreground(tcell.ColorDarkRed), '*')
}
for i := index - 1; i >= 0 && view.msgBuffer[i] == msg; i-- {
line--
}
msg.Draw(mauview.NewProxyScreen(screen, messageX, line, view.width()-messageX, msg.Height()))
- line += msg.Height() - 1
+ line += msg.Height()
+
+ prevMsg = msg
}
view.msgBufferLock.RUnlock()
}