Fix m.emote rendering

This commit is contained in:
Tulir Asokan 2019-04-10 17:08:39 +03:00
parent 45a68c7fb5
commit 7e0278c571
2 changed files with 22 additions and 1 deletions

View File

@ -170,6 +170,9 @@ func (msg *BaseMessage) TextColor() tcell.Color {
// //
// However, other messages are the default color instead of a color stored in the struct. // However, other messages are the default color instead of a color stored in the struct.
func (msg *BaseMessage) TimestampColor() tcell.Color { func (msg *BaseMessage) TimestampColor() tcell.Color {
if msg.MsgIsService {
return tcell.ColorGray
}
return msg.getStateSpecificColor() return msg.getStateSpecificColor()
} }

View File

@ -305,6 +305,9 @@ func (parser *htmlParser) singleNodeToEntity(node *html.Node) Entity {
if !parser.keepLinebreak { if !parser.keepLinebreak {
node.Data = strings.ReplaceAll(node.Data, "\n", "") node.Data = strings.ReplaceAll(node.Data, "\n", "")
} }
if len(node.Data) == 0 {
return nil
}
return &BaseEntity{ return &BaseEntity{
Tag: "text", Tag: "text",
Text: node.Data, Text: node.Data,
@ -347,6 +350,13 @@ func (parser *htmlParser) isBlockTag(tag string) bool {
func (parser *htmlParser) Parse(htmlData string) Entity { func (parser *htmlParser) Parse(htmlData string) Entity {
node, _ := html.Parse(strings.NewReader(htmlData)) node, _ := html.Parse(strings.NewReader(htmlData))
bodyNode := node.FirstChild.FirstChild
for bodyNode != nil && (bodyNode.Type != html.ElementNode || bodyNode.Data != "body") {
bodyNode = bodyNode.NextSibling
}
if bodyNode != nil {
return parser.singleNodeToEntity(bodyNode)
}
return parser.singleNodeToEntity(node) return parser.singleNodeToEntity(node)
} }
@ -362,7 +372,15 @@ func Parse(room *rooms.Room, evt *mautrix.Event, senderDisplayname string) Entit
parser := htmlParser{room: room} parser := htmlParser{room: room}
root := parser.Parse(htmlData) root := parser.Parse(htmlData)
root.(*BaseEntity).Block = false beRoot := root.(*BaseEntity)
beRoot.Block = false
if len(beRoot.Children) > 0 {
beChild, ok := beRoot.Children[0].(*BaseEntity)
if ok && beChild.Tag == "p" {
// Hacky fix for m.emote
beChild.Block = false
}
}
if evt.Content.MsgType == mautrix.MsgEmote { if evt.Content.MsgType == mautrix.MsgEmote {
root = &BaseEntity{ root = &BaseEntity{