forked from Mirrors/gomuks
Move chat view username and timestamp inline
This commit is contained in:
parent
bd2c06e417
commit
dc5632e946
2 changed files with 66 additions and 29 deletions
|
@ -177,7 +177,7 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction MessageDir
|
||||||
|
|
||||||
if direction == AppendMessage {
|
if direction == AppendMessage {
|
||||||
if view.ScrollOffset > 0 {
|
if view.ScrollOffset > 0 {
|
||||||
view.ScrollOffset += message.Height()
|
view.ScrollOffset += message.Height(view.showModernHeader(message))
|
||||||
}
|
}
|
||||||
view.messagesLock.Lock()
|
view.messagesLock.Lock()
|
||||||
if len(view.messages) > 0 && !view.messages[len(view.messages)-1].SameDate(message) {
|
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()
|
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) {
|
func (view *MessageView) appendBuffer(message *messages.UIMessage) {
|
||||||
view.msgBufferLock.Lock()
|
view.msgBufferLock.Lock()
|
||||||
view.appendBufferUnlocked(message)
|
view.appendBufferUnlocked(message)
|
||||||
|
@ -258,7 +269,7 @@ func (view *MessageView) appendBuffer(message *messages.UIMessage) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (view *MessageView) appendBufferUnlocked(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.msgBuffer = append(view.msgBuffer, message)
|
||||||
}
|
}
|
||||||
view.prevMsgCount++
|
view.prevMsgCount++
|
||||||
|
@ -291,13 +302,13 @@ func (view *MessageView) replaceBuffer(original *messages.UIMessage, new *messag
|
||||||
end++
|
end++
|
||||||
}
|
}
|
||||||
|
|
||||||
if new.Height() == 0 {
|
if new.Height(view.showModernHeader(new)) == 0 {
|
||||||
new.CalculateBuffer(view.prevPrefs, view.prevWidth())
|
new.CalculateBuffer(view.prevPrefs, view.prevWidth())
|
||||||
}
|
}
|
||||||
|
|
||||||
view.msgBufferLock.Lock()
|
view.msgBufferLock.Lock()
|
||||||
if new.Height() != end-start {
|
if new.Height(view.showModernHeader(new)) != end-start {
|
||||||
height := new.Height()
|
height := new.Height(view.showModernHeader(new))
|
||||||
|
|
||||||
newBuffer := make([]*messages.UIMessage, height+len(view.msgBuffer)-end)
|
newBuffer := make([]*messages.UIMessage, height+len(view.msgBuffer)-end)
|
||||||
for i := 0; i < height; i++ {
|
for i := 0; i < height; i++ {
|
||||||
|
@ -616,9 +627,13 @@ func (view *MessageView) Draw(screen mauview.Screen) {
|
||||||
}
|
}
|
||||||
messageX := usernameX + view.widestSender() + SenderMessageGap
|
messageX := usernameX + view.widestSender() + SenderMessageGap
|
||||||
|
|
||||||
bareMode := view.config.Preferences.BareMessageView
|
noLeftPad := view.config.Preferences.BareMessageView || view.config.Preferences.DisplayMode == config.DisplayModeModern
|
||||||
if bareMode {
|
if noLeftPad {
|
||||||
messageX = 0
|
if view.config.Preferences.DisplayMode == config.DisplayModeModern {
|
||||||
|
messageX = 2
|
||||||
|
} else {
|
||||||
|
messageX = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
indexOffset := view.getIndexOffset(screen, height, messageX)
|
indexOffset := view.getIndexOffset(screen, height, messageX)
|
||||||
|
@ -628,7 +643,7 @@ func (view *MessageView) Draw(screen mauview.Screen) {
|
||||||
viewStart = -indexOffset
|
viewStart = -indexOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
if !bareMode {
|
if !noLeftPad {
|
||||||
separatorX := usernameX + view.widestSender() + SenderSeparatorGap
|
separatorX := usernameX + view.widestSender() + SenderSeparatorGap
|
||||||
scrollBarHeight, scrollBarPos := view.calculateScrollBar(height)
|
scrollBarHeight, scrollBarPos := view.calculateScrollBar(height)
|
||||||
|
|
||||||
|
@ -650,31 +665,48 @@ func (view *MessageView) Draw(screen mauview.Screen) {
|
||||||
|
|
||||||
msg := view.msgBuffer[index]
|
msg := view.msgBuffer[index]
|
||||||
if msg == prevMsg {
|
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++
|
line++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.FormatTime()) > 0 && !view.config.Preferences.HideTimestamp {
|
if view.config.Preferences.DisplayMode != config.DisplayModeModern {
|
||||||
widget.WriteLineSimpleColor(screen, msg.FormatTime(), 0, line, msg.TimestampColor())
|
if len(msg.FormatTime()) > 0 && !view.config.Preferences.HideTimestamp {
|
||||||
}
|
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()) {
|
// TODO hiding senders might not be that nice after all, maybe an option? (disabled for now)
|
||||||
widget.WriteLineColor(
|
//if !bareMode && (prevMsg == nil || meta.Sender() != prevMsg.Sender()) {
|
||||||
screen, mauview.AlignRight, msg.Sender(),
|
widget.WriteLineColor(
|
||||||
usernameX, line, view.widestSender(),
|
screen, mauview.AlignRight, msg.Sender(),
|
||||||
msg.SenderColor())
|
usernameX, line, view.widestSender(),
|
||||||
//}
|
msg.SenderColor())
|
||||||
if msg.Edited {
|
//}
|
||||||
// TODO add better indicator for edits
|
if msg.Edited {
|
||||||
screen.SetCell(usernameX+view.widestSender(), line, tcell.StyleDefault.Foreground(tcell.ColorDarkRed), '*')
|
// 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-- {
|
for i := index - 1; i >= 0 && view.msgBuffer[i] == msg; i-- {
|
||||||
line--
|
line--
|
||||||
}
|
}
|
||||||
msg.Draw(mauview.NewProxyScreen(screen, messageX, line, view.width()-messageX, msg.Height()))
|
offset := 0
|
||||||
line += msg.Height()
|
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
|
prevMsg = msg
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,7 +254,7 @@ func (msg *UIMessage) TimestampColor() tcell.Color {
|
||||||
|
|
||||||
func (msg *UIMessage) ReplyHeight() int {
|
func (msg *UIMessage) ReplyHeight() int {
|
||||||
if msg.ReplyTo != nil {
|
if msg.ReplyTo != nil {
|
||||||
return 1 + msg.ReplyTo.Height()
|
return 1 + msg.ReplyTo.Height(false)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -267,8 +267,13 @@ func (msg *UIMessage) ReactionHeight() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Height returns the number of rows in the computed buffer (see Buffer()).
|
// Height returns the number of rows in the computed buffer (see Buffer()).
|
||||||
func (msg *UIMessage) Height() int {
|
func (msg *UIMessage) Height(modernHeader bool) int {
|
||||||
return msg.ReplyHeight() + msg.Renderer.Height() + msg.ReactionHeight()
|
height := msg.ReplyHeight() + msg.Renderer.Height() + msg.ReactionHeight()
|
||||||
|
if modernHeader {
|
||||||
|
height++
|
||||||
|
}
|
||||||
|
|
||||||
|
return height
|
||||||
}
|
}
|
||||||
|
|
||||||
func (msg *UIMessage) Time() time.Time {
|
func (msg *UIMessage) Time() time.Time {
|
||||||
|
@ -366,7 +371,7 @@ func (msg *UIMessage) DrawReply(screen mauview.Screen) mauview.Screen {
|
||||||
return screen
|
return screen
|
||||||
}
|
}
|
||||||
width, height := screen.Size()
|
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, "In reply to", 1, 0, tcell.ColorGreen)
|
||||||
widget.WriteLineSimpleColor(screen, msg.ReplyTo.SenderName, 13, 0, msg.ReplyTo.SenderColor())
|
widget.WriteLineSimpleColor(screen, msg.ReplyTo.SenderName, 13, 0, msg.ReplyTo.SenderColor())
|
||||||
for y := 0; y < 1+replyHeight; y++ {
|
for y := 0; y < 1+replyHeight; y++ {
|
||||||
|
|
Loading…
Add table
Reference in a new issue