Add support for sending Markdown messages

This commit is contained in:
Tulir Asokan
2018-04-18 14:20:57 +03:00
parent 3750d5007f
commit bb36996194
12 changed files with 66 additions and 83 deletions

View File

@ -37,6 +37,9 @@ var matrixToURL = regexp.MustCompile("^(?:https?://)?(?:www\\.)?matrix\\.to/#/([
type MatrixHTMLProcessor struct {
text tstring.TString
sender string
msgtype string
indent string
listType string
lineIsNew bool
@ -52,7 +55,11 @@ func (parser *MatrixHTMLProcessor) newline() {
}
}
func (parser *MatrixHTMLProcessor) Preprocess() {}
func (parser *MatrixHTMLProcessor) Preprocess() {
if parser.msgtype == "m.emote" {
parser.text = tstring.NewColorTString(fmt.Sprintf("* %s ", parser.sender), widget.GetHashColor(parser.sender))
}
}
func (parser *MatrixHTMLProcessor) HandleText(text string) {
style := tcell.StyleDefault
@ -170,12 +177,15 @@ func (parser *MatrixHTMLProcessor) Postprocess() {
}
// ParseHTMLMessage parses a HTML-formatted Matrix event into a UIMessage.
func ParseHTMLMessage(room *rooms.Room, evt *gomatrix.Event) tstring.TString {
func ParseHTMLMessage(room *rooms.Room, evt *gomatrix.Event, senderDisplayname string) tstring.TString {
htmlData, _ := evt.Content["formatted_body"].(string)
msgtype, _ := evt.Content["msgtype"].(string)
processor := &MatrixHTMLProcessor{
room: room,
text: tstring.NewBlankTString(),
msgtype: msgtype,
sender: senderDisplayname,
indent: "",
listType: "",
lineIsNew: true,

View File

@ -60,7 +60,7 @@ func ParseMessage(gmx ifc.Gomuks, room *rooms.Room, evt *gomatrix.Event) message
case "m.text", "m.notice", "m.emote":
format, hasFormat := evt.Content["format"].(string)
if hasFormat && format == "org.matrix.custom.html" {
text := ParseHTMLMessage(room, evt)
text := ParseHTMLMessage(room, evt, displayname)
return messages.NewExpandedTextMessage(evt.ID, evt.Sender, displayname, msgtype, text, ts)
} else {
text, _ := evt.Content["body"].(string)