1
0
Fork 0
forked from Mirrors/gomuks

Move chat view username and timestamp inline

This commit is contained in:
FIGBERT 2023-03-17 12:49:19 -07:00
parent bd2c06e417
commit dc5632e946
No known key found for this signature in database
GPG key ID: 67F1598D607A844B
2 changed files with 66 additions and 29 deletions

View file

@ -177,7 +177,7 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction MessageDir
if direction == AppendMessage {
if view.ScrollOffset > 0 {
view.ScrollOffset += message.Height()
view.ScrollOffset += message.Height(view.showModernHeader(message))
}
view.messagesLock.Lock()
if len(view.messages) > 0 && !view.messages[len(view.messages)-1].SameDate(message) {
@ -251,6 +251,17 @@ func (view *MessageView) setMessageID(message *messages.UIMessage) {
view.messageIDLock.Unlock()
}
func (view *MessageView) showModernHeader(message *messages.UIMessage) bool {
if view.config.Preferences.DisplayMode != config.DisplayModeModern {
return false
}
if message.IsService {
return false
}
return true
}
func (view *MessageView) appendBuffer(message *messages.UIMessage) {
view.msgBufferLock.Lock()
view.appendBufferUnlocked(message)
@ -258,7 +269,7 @@ func (view *MessageView) appendBuffer(message *messages.UIMessage) {
}
func (view *MessageView) appendBufferUnlocked(message *messages.UIMessage) {
for i := 0; i < message.Height(); i++ {
for i := 0; i < message.Height(view.showModernHeader(message)); i++ {
view.msgBuffer = append(view.msgBuffer, message)
}
view.prevMsgCount++
@ -291,13 +302,13 @@ func (view *MessageView) replaceBuffer(original *messages.UIMessage, new *messag
end++
}
if new.Height() == 0 {
if new.Height(view.showModernHeader(new)) == 0 {
new.CalculateBuffer(view.prevPrefs, view.prevWidth())
}
view.msgBufferLock.Lock()
if new.Height() != end-start {
height := new.Height()
if new.Height(view.showModernHeader(new)) != end-start {
height := new.Height(view.showModernHeader(new))
newBuffer := make([]*messages.UIMessage, height+len(view.msgBuffer)-end)
for i := 0; i < height; i++ {
@ -616,10 +627,14 @@ func (view *MessageView) Draw(screen mauview.Screen) {
}
messageX := usernameX + view.widestSender() + SenderMessageGap
bareMode := view.config.Preferences.BareMessageView
if bareMode {
noLeftPad := view.config.Preferences.BareMessageView || view.config.Preferences.DisplayMode == config.DisplayModeModern
if noLeftPad {
if view.config.Preferences.DisplayMode == config.DisplayModeModern {
messageX = 2
} else {
messageX = 0
}
}
indexOffset := view.getIndexOffset(screen, height, messageX)
@ -628,7 +643,7 @@ func (view *MessageView) Draw(screen mauview.Screen) {
viewStart = -indexOffset
}
if !bareMode {
if !noLeftPad {
separatorX := usernameX + view.widestSender() + SenderSeparatorGap
scrollBarHeight, scrollBarPos := view.calculateScrollBar(height)
@ -650,11 +665,12 @@ func (view *MessageView) Draw(screen mauview.Screen) {
msg := view.msgBuffer[index]
if msg == prevMsg {
debug.Print("Unexpected re-encounter of", msg, msg.Height(), "at", line, index)
debug.Print("Unexpected re-encounter of", msg, msg.Height(view.showModernHeader(msg)), "at", line, index)
line++
continue
}
if view.config.Preferences.DisplayMode != config.DisplayModeModern {
if len(msg.FormatTime()) > 0 && !view.config.Preferences.HideTimestamp {
widget.WriteLineSimpleColor(screen, msg.FormatTime(), 0, line, msg.TimestampColor())
}
@ -669,12 +685,28 @@ func (view *MessageView) Draw(screen mauview.Screen) {
// 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()
offset := 0
if view.showModernHeader(msg) {
offset = 1
boldStyle := tcell.StyleDefault.Bold(true)
username := msg.Sender()
widget.WriteLine(screen, mauview.AlignLeft, username,
messageX, line, len(username), boldStyle.Foreground(msg.SenderColor()))
widget.WriteLine(screen, mauview.AlignLeft, " "+string(tcell.RuneBullet)+" ",
messageX+len(username), line, 3, boldStyle)
widget.WriteLine(screen, mauview.AlignLeft, msg.FormatTime(),
messageX+len(username)+3, line, view.width()-len(username)-3,
boldStyle.Foreground(msg.TimestampColor()),
)
}
msg.Draw(mauview.NewProxyScreen(screen, messageX, line+offset, view.width()-messageX, msg.Height(view.showModernHeader(msg))))
line += msg.Height(view.showModernHeader(msg))
prevMsg = msg
}

View file

@ -254,7 +254,7 @@ func (msg *UIMessage) TimestampColor() tcell.Color {
func (msg *UIMessage) ReplyHeight() int {
if msg.ReplyTo != nil {
return 1 + msg.ReplyTo.Height()
return 1 + msg.ReplyTo.Height(false)
}
return 0
}
@ -267,8 +267,13 @@ func (msg *UIMessage) ReactionHeight() int {
}
// Height returns the number of rows in the computed buffer (see Buffer()).
func (msg *UIMessage) Height() int {
return msg.ReplyHeight() + msg.Renderer.Height() + msg.ReactionHeight()
func (msg *UIMessage) Height(modernHeader bool) int {
height := msg.ReplyHeight() + msg.Renderer.Height() + msg.ReactionHeight()
if modernHeader {
height++
}
return height
}
func (msg *UIMessage) Time() time.Time {
@ -366,7 +371,7 @@ func (msg *UIMessage) DrawReply(screen mauview.Screen) mauview.Screen {
return screen
}
width, height := screen.Size()
replyHeight := msg.ReplyTo.Height()
replyHeight := msg.ReplyTo.Height(false)
widget.WriteLineSimpleColor(screen, "In reply to", 1, 0, tcell.ColorGreen)
widget.WriteLineSimpleColor(screen, msg.ReplyTo.SenderName, 13, 0, msg.ReplyTo.SenderColor())
for y := 0; y < 1+replyHeight; y++ {