Add initial support for rendering replies
This commit is contained in:
		@@ -143,8 +143,6 @@ func (view *MessageView) AddMessage(ifcMessage ifc.Message, direction MessageDir
 | 
			
		||||
		view.replaceMessage(oldMsg, message)
 | 
			
		||||
		view.deleteMessageID(message.TxnID)
 | 
			
		||||
		direction = IgnoreMessage
 | 
			
		||||
	} else if oldMsg = view.getMessageByID(message.Relation.GetReplaceID()); oldMsg != nil {
 | 
			
		||||
		direction = IgnoreMessage
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	view.updateWidestSender(message.Sender())
 | 
			
		||||
@@ -608,6 +606,10 @@ func (view *MessageView) Draw(screen mauview.Screen) {
 | 
			
		||||
				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
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,7 @@ type UIMessage struct {
 | 
			
		||||
	State              event.OutgoingState
 | 
			
		||||
	IsHighlight        bool
 | 
			
		||||
	IsService          bool
 | 
			
		||||
	Edited             bool
 | 
			
		||||
	Source             json.RawMessage
 | 
			
		||||
	ReplyTo            *UIMessage
 | 
			
		||||
	Renderer           MessageRenderer
 | 
			
		||||
@@ -80,6 +81,7 @@ func newUIMessage(evt *event.Event, displayname string, renderer MessageRenderer
 | 
			
		||||
		State:              evt.Gomuks.OutgoingState,
 | 
			
		||||
		IsHighlight:        false,
 | 
			
		||||
		IsService:          false,
 | 
			
		||||
		Edited:             len(evt.Gomuks.Edits) > 0,
 | 
			
		||||
		Source:             evt.Content.VeryRaw,
 | 
			
		||||
		Renderer:           renderer,
 | 
			
		||||
	}
 | 
			
		||||
@@ -231,7 +233,6 @@ func (msg *UIMessage) SetID(id string) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msg *UIMessage) SetIsHighlight(isHighlight bool) {
 | 
			
		||||
	// TODO Textmessage cache needs to be cleared
 | 
			
		||||
	msg.IsHighlight = isHighlight
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -127,8 +127,8 @@ func ParseMessage(matrix ifc.MatrixContainer, room *rooms.Room, evt *event.Event
 | 
			
		||||
	if len(evt.Content.GetReplyTo()) > 0 {
 | 
			
		||||
		evt.Content.RemoveReplyFallback()
 | 
			
		||||
	}
 | 
			
		||||
	if evt.Content.GetRelatesTo().Type == mautrix.RelReplace && evt.Content.NewContent != nil {
 | 
			
		||||
		evt.Content = *evt.Content.NewContent
 | 
			
		||||
	if len(evt.Gomuks.Edits) > 0 {
 | 
			
		||||
		evt.Content = *evt.Gomuks.Edits[len(evt.Gomuks.Edits)-1].Content.NewContent
 | 
			
		||||
	}
 | 
			
		||||
	switch evt.Content.MsgType {
 | 
			
		||||
	case "m.text", "m.notice", "m.emote":
 | 
			
		||||
 
 | 
			
		||||
@@ -29,9 +29,10 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TextMessage struct {
 | 
			
		||||
	cache  tstring.TString
 | 
			
		||||
	buffer []tstring.TString
 | 
			
		||||
	Text   string
 | 
			
		||||
	cache       tstring.TString
 | 
			
		||||
	buffer      []tstring.TString
 | 
			
		||||
	isHighlight bool
 | 
			
		||||
	Text        string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewTextMessage creates a new UITextMessage object with the provided values and the default state.
 | 
			
		||||
@@ -85,6 +86,9 @@ func (msg *TextMessage) String() string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msg *TextMessage) CalculateBuffer(prefs config.UserPreferences, width int, uiMsg *UIMessage) {
 | 
			
		||||
	if uiMsg.IsHighlight != msg.isHighlight {
 | 
			
		||||
		msg.cache = nil
 | 
			
		||||
	}
 | 
			
		||||
	msg.buffer = calculateBufferWithText(prefs, msg.getCache(uiMsg), width, uiMsg)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -412,7 +412,7 @@ func (view *RoomView) SendMessage(msgtype mautrix.MessageType, text string) {
 | 
			
		||||
	}
 | 
			
		||||
	evt := view.parent.matrix.PrepareMarkdownMessage(view.Room.ID, msgtype, text)
 | 
			
		||||
	msg := view.parseEvent(evt)
 | 
			
		||||
	view.AddMessage(msg)
 | 
			
		||||
	view.content.AddMessage(msg, AppendMessage)
 | 
			
		||||
	eventID, err := view.parent.matrix.SendEvent(evt)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		msg.State = event.StateSendFail
 | 
			
		||||
@@ -462,20 +462,32 @@ func (view *RoomView) AddServiceMessage(text string) {
 | 
			
		||||
	view.content.AddMessage(messages.NewServiceMessage(text), AppendMessage)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) AddMessage(message ifc.Message) {
 | 
			
		||||
	view.content.AddMessage(message, AppendMessage)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) parseEvent(evt *event.Event) *messages.UIMessage {
 | 
			
		||||
	return messages.ParseEvent(view.parent.matrix, view.parent, view.Room, evt)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) ParseEvent(evt *event.Event) ifc.Message {
 | 
			
		||||
	msg := view.parseEvent(evt)
 | 
			
		||||
	if msg == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
func (view *RoomView) AddHistoryEvent(evt *event.Event) {
 | 
			
		||||
	if msg := view.parseEvent(evt); msg != nil {
 | 
			
		||||
		view.content.AddMessage(msg, PrependMessage)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) AddEvent(evt *event.Event) ifc.Message {
 | 
			
		||||
	if msg := view.parseEvent(evt); msg != nil {
 | 
			
		||||
		view.content.AddMessage(msg, AppendMessage)
 | 
			
		||||
		return msg
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) AddRedaction(redactedEvt *event.Event) {
 | 
			
		||||
	view.AddEvent(redactedEvt)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) AddEdit(evt *event.Event) {
 | 
			
		||||
	if msg := view.parseEvent(evt); msg != nil {
 | 
			
		||||
		view.content.AddMessage(msg, IgnoreMessage)
 | 
			
		||||
	}
 | 
			
		||||
	return msg
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) GetEvent(eventID string) ifc.Message {
 | 
			
		||||
 
 | 
			
		||||
@@ -453,9 +453,7 @@ func (view *MainView) LoadHistory(roomID string) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	for _, evt := range history {
 | 
			
		||||
		if message := roomView.ParseEvent(evt); message != nil {
 | 
			
		||||
			msgView.AddMessage(message, PrependMessage)
 | 
			
		||||
		}
 | 
			
		||||
		roomView.AddHistoryEvent(evt)
 | 
			
		||||
	}
 | 
			
		||||
	view.parent.Render()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user