Fix date change messages and input submit handling
This commit is contained in:
parent
bbde121947
commit
06c306bee9
@ -120,7 +120,6 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction MessageDir
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var oldMsg messages.UIMessage
|
var oldMsg messages.UIMessage
|
||||||
var messageExists bool
|
var messageExists bool
|
||||||
if oldMsg, messageExists = view.messageIDs[message.ID()]; messageExists {
|
if oldMsg, messageExists = view.messageIDs[message.ID()]; messageExists {
|
||||||
@ -141,14 +140,30 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction MessageDir
|
|||||||
}
|
}
|
||||||
message.CalculateBuffer(view.config.Preferences, width)
|
message.CalculateBuffer(view.config.Preferences, width)
|
||||||
|
|
||||||
|
makeDateChange := func() messages.UIMessage {
|
||||||
|
dateChange := messages.NewDateChangeMessage(
|
||||||
|
fmt.Sprintf("Date changed to %s", message.FormatDate()))
|
||||||
|
dateChange.CalculateBuffer(view.config.Preferences, width)
|
||||||
|
view.appendBuffer(dateChange)
|
||||||
|
return dateChange
|
||||||
|
}
|
||||||
|
|
||||||
if direction == AppendMessage {
|
if direction == AppendMessage {
|
||||||
if view.ScrollOffset > 0 {
|
if view.ScrollOffset > 0 {
|
||||||
view.ScrollOffset += message.Height()
|
view.ScrollOffset += message.Height()
|
||||||
}
|
}
|
||||||
|
if len(view.messages) > 0 && !view.messages[len(view.messages)-1].SameDate(message) {
|
||||||
|
view.messages = append(view.messages, makeDateChange(), message)
|
||||||
|
} else {
|
||||||
view.messages = append(view.messages, message)
|
view.messages = append(view.messages, message)
|
||||||
|
}
|
||||||
view.appendBuffer(message)
|
view.appendBuffer(message)
|
||||||
} else if direction == PrependMessage {
|
} else if direction == PrependMessage {
|
||||||
|
if len(view.messages) > 0 && !view.messages[0].SameDate(message) {
|
||||||
|
view.messages = append([]messages.UIMessage{message, makeDateChange()}, view.messages...)
|
||||||
|
} else {
|
||||||
view.messages = append([]messages.UIMessage{message}, view.messages...)
|
view.messages = append([]messages.UIMessage{message}, view.messages...)
|
||||||
|
}
|
||||||
} else if oldMsg != nil {
|
} else if oldMsg != nil {
|
||||||
view.replaceBuffer(oldMsg, message)
|
view.replaceBuffer(oldMsg, message)
|
||||||
} else {
|
} else {
|
||||||
@ -156,21 +171,12 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction MessageDir
|
|||||||
debug.PrintStack()
|
debug.PrintStack()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(message.ID()) > 0 {
|
||||||
view.messageIDs[message.ID()] = message
|
view.messageIDs[message.ID()] = message
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (view *MessageView) appendBuffer(message messages.UIMessage) {
|
func (view *MessageView) appendBuffer(message messages.UIMessage) {
|
||||||
if len(view.msgBuffer) > 0 {
|
|
||||||
prevMeta := view.msgBuffer[len(view.msgBuffer)-1]
|
|
||||||
if prevMeta != nil && prevMeta.FormatDate() != message.FormatDate() {
|
|
||||||
/* FIXME view.textBuffer = append(view.textBuffer, tstring.NewColorTString(
|
|
||||||
fmt.Sprintf("Date changed to %s", message.FormatDate()),
|
|
||||||
tcell.ColorGreen))
|
|
||||||
view.msgBuffer = append(view.msgBuffer, &messages.BasicMeta{
|
|
||||||
BTimestampColor: tcell.ColorDefault, BTextColor: tcell.ColorGreen})*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < message.Height(); i++ {
|
for i := 0; i < message.Height(); i++ {
|
||||||
view.msgBuffer = append(view.msgBuffer, message)
|
view.msgBuffer = append(view.msgBuffer, message)
|
||||||
}
|
}
|
||||||
@ -178,7 +184,9 @@ func (view *MessageView) appendBuffer(message messages.UIMessage) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (view *MessageView) replaceMessage(original messages.UIMessage, new messages.UIMessage) {
|
func (view *MessageView) replaceMessage(original messages.UIMessage, new messages.UIMessage) {
|
||||||
|
if len(new.ID()) > 0 {
|
||||||
view.messageIDs[new.ID()] = new
|
view.messageIDs[new.ID()] = new
|
||||||
|
}
|
||||||
for index, msg := range view.messages {
|
for index, msg := range view.messages {
|
||||||
if msg == original {
|
if msg == original {
|
||||||
view.messages[index] = new
|
view.messages[index] = new
|
||||||
|
@ -191,6 +191,12 @@ func (msg *BaseMessage) FormatDate() string {
|
|||||||
return msg.MsgTimestamp.Format(DateFormat)
|
return msg.MsgTimestamp.Format(DateFormat)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msg *BaseMessage) SameDate(message UIMessage) bool {
|
||||||
|
year1, month1, day1 := msg.Timestamp().Date()
|
||||||
|
year2, month2, day2 := message.Timestamp().Date()
|
||||||
|
return day1 == day2 && month1 == month2 && year1 == year2
|
||||||
|
}
|
||||||
|
|
||||||
func (msg *BaseMessage) ID() string {
|
func (msg *BaseMessage) ID() string {
|
||||||
if len(msg.MsgID) == 0 {
|
if len(msg.MsgID) == 0 {
|
||||||
return msg.MsgTxnID
|
return msg.MsgTxnID
|
||||||
|
@ -17,7 +17,10 @@
|
|||||||
package messages
|
package messages
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
"maunium.net/go/mautrix"
|
"maunium.net/go/mautrix"
|
||||||
|
"maunium.net/go/tcell"
|
||||||
|
|
||||||
"maunium.net/go/gomuks/config"
|
"maunium.net/go/gomuks/config"
|
||||||
"maunium.net/go/gomuks/ui/messages/tstring"
|
"maunium.net/go/gomuks/ui/messages/tstring"
|
||||||
@ -36,6 +39,24 @@ func NewExpandedTextMessage(event *mautrix.Event, displayname string, text tstri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ZeroTime = time.Time{}
|
||||||
|
|
||||||
|
func NewDateChangeMessage(text string) UIMessage {
|
||||||
|
midnight := time.Now()
|
||||||
|
midnight = time.Date(midnight.Year(), midnight.Month(), midnight.Day(),
|
||||||
|
0, 0, 0, 0,
|
||||||
|
midnight.Location())
|
||||||
|
return &ExpandedTextMessage{
|
||||||
|
BaseMessage: BaseMessage{
|
||||||
|
MsgSenderID: "*",
|
||||||
|
MsgSender: "*",
|
||||||
|
MsgTimestamp: midnight,
|
||||||
|
MsgIsService: true,
|
||||||
|
},
|
||||||
|
MsgText: tstring.NewColorTString(text, tcell.ColorGreen),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (msg *ExpandedTextMessage) GenerateText() tstring.TString {
|
func (msg *ExpandedTextMessage) GenerateText() tstring.TString {
|
||||||
return msg.MsgText
|
return msg.MsgText
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ type UIMessage interface {
|
|||||||
TimestampColor() tcell.Color
|
TimestampColor() tcell.Color
|
||||||
FormatTime() string
|
FormatTime() string
|
||||||
FormatDate() string
|
FormatDate() string
|
||||||
|
SameDate(message UIMessage) bool
|
||||||
|
|
||||||
CalculateBuffer(preferences config.UserPreferences, width int)
|
CalculateBuffer(preferences config.UserPreferences, width int)
|
||||||
Draw(screen mauview.Screen)
|
Draw(screen mauview.Screen)
|
||||||
|
@ -57,8 +57,6 @@ type RoomView struct {
|
|||||||
ulBorderScreen *mauview.ProxyScreen
|
ulBorderScreen *mauview.ProxyScreen
|
||||||
ulScreen *mauview.ProxyScreen
|
ulScreen *mauview.ProxyScreen
|
||||||
|
|
||||||
inputSubmitFunc func(room *RoomView, text string)
|
|
||||||
|
|
||||||
prevScreen mauview.Screen
|
prevScreen mauview.Screen
|
||||||
|
|
||||||
parent *MainView
|
parent *MainView
|
||||||
@ -118,11 +116,6 @@ func (view *RoomView) logPath(dir string) string {
|
|||||||
return filepath.Join(dir, fmt.Sprintf("%s.gmxlog", view.Room.ID))
|
return filepath.Join(dir, fmt.Sprintf("%s.gmxlog", view.Room.ID))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (view *RoomView) SetInputSubmitFunc(fn func(room *RoomView, text string)) *RoomView {
|
|
||||||
view.inputSubmitFunc = fn
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
func (view *RoomView) SetInputChangedFunc(fn func(room *RoomView, text string)) *RoomView {
|
func (view *RoomView) SetInputChangedFunc(fn func(room *RoomView, text string)) *RoomView {
|
||||||
view.input.SetChangedFunc(func(text string) {
|
view.input.SetChangedFunc(func(text string) {
|
||||||
fn(view, text)
|
fn(view, text)
|
||||||
@ -250,8 +243,8 @@ func (view *RoomView) OnKeyEvent(event mauview.KeyEvent) bool {
|
|||||||
msgView.AddScrollOffset(-msgView.Height() / 2)
|
msgView.AddScrollOffset(-msgView.Height() / 2)
|
||||||
return true
|
return true
|
||||||
case tcell.KeyEnter:
|
case tcell.KeyEnter:
|
||||||
if event.Modifiers()&tcell.ModShift == 0 && event.Modifiers()&tcell.ModCtrl == 0 && view.inputSubmitFunc != nil {
|
if event.Modifiers()&tcell.ModShift == 0 && event.Modifiers()&tcell.ModCtrl == 0 {
|
||||||
view.inputSubmitFunc(view, view.input.GetText())
|
view.InputSubmit(view.input.GetText())
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user