From 3b2d5fa0349bf01217f6954813c669680cdd16d4 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 18 Apr 2018 17:33:59 +0300 Subject: Fix nick coloring --- ui/messages/parser/htmlparser.go | 10 ++++++---- ui/messages/parser/parser.go | 33 ++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 17 deletions(-) (limited to 'ui/messages') diff --git a/ui/messages/parser/htmlparser.go b/ui/messages/parser/htmlparser.go index 5e3b289..8577ee7 100644 --- a/ui/messages/parser/htmlparser.go +++ b/ui/messages/parser/htmlparser.go @@ -37,8 +37,9 @@ var matrixToURL = regexp.MustCompile("^(?:https?://)?(?:www\\.)?matrix\\.to/#/([ type MatrixHTMLProcessor struct { text tstring.TString - sender string - msgtype string + senderID string + sender string + msgtype string indent string listType string @@ -57,7 +58,7 @@ func (parser *MatrixHTMLProcessor) newline() { func (parser *MatrixHTMLProcessor) Preprocess() { if parser.msgtype == "m.emote" { - parser.text = tstring.NewColorTString(fmt.Sprintf("* %s ", parser.sender), widget.GetHashColor(parser.sender)) + parser.text = tstring.NewColorTString(fmt.Sprintf("* %s ", parser.sender), widget.GetHashColor(parser.senderID)) } } @@ -147,7 +148,7 @@ func (parser *MatrixHTMLProcessor) HandleEndTag(tagName string) { pillTarget := match[1] if pillTarget[0] == '@' { if member := parser.room.GetMember(pillTarget); member != nil { - parser.text = parser.text.AppendColor(member.DisplayName, widget.GetHashColor(member.DisplayName)) + parser.text = parser.text.AppendColor(member.DisplayName, widget.GetHashColor(member.UserID)) } else { parser.text = parser.text.Append(pillTarget) } @@ -185,6 +186,7 @@ func ParseHTMLMessage(room *rooms.Room, evt *gomatrix.Event, senderDisplayname s room: room, text: tstring.NewBlankTString(), msgtype: msgtype, + senderID: evt.Sender, sender: senderDisplayname, indent: "", listType: "", diff --git a/ui/messages/parser/parser.go b/ui/messages/parser/parser.go index d12383a..fbb2bf5 100644 --- a/ui/messages/parser/parser.go +++ b/ui/messages/parser/parser.go @@ -79,16 +79,19 @@ func ParseMessage(gmx ifc.Gomuks, room *rooms.Room, evt *gomatrix.Event) message func getMembershipEventContent(room *rooms.Room, evt *gomatrix.Event) (sender string, text tstring.TString) { member := room.GetMember(evt.Sender) + senderDisplayname := evt.Sender if member != nil { - evt.Sender = member.DisplayName + senderDisplayname = member.DisplayName } + membership, _ := evt.Content["membership"].(string) displayname, _ := evt.Content["displayname"].(string) if len(displayname) == 0 { displayname = *evt.StateKey } + prevMembership := "leave" - prevDisplayname := "" + prevDisplayname := *evt.StateKey if evt.Unsigned.PrevContent != nil { prevMembership, _ = evt.Unsigned.PrevContent["membership"].(string) prevDisplayname, _ = evt.Unsigned.PrevContent["displayname"].(string) @@ -98,36 +101,40 @@ func getMembershipEventContent(room *rooms.Room, evt *gomatrix.Event) (sender st switch membership { case "invite": sender = "---" - text = tstring.NewColorTString(fmt.Sprintf("%s invited %s.", evt.Sender, displayname), tcell.ColorGreen) - text.Colorize(0, len(evt.Sender), widget.GetHashColor(evt.Sender)) - text.Colorize(len(evt.Sender)+len(" invited "), len(displayname), widget.GetHashColor(displayname)) + text = tstring.NewColorTString(fmt.Sprintf("%s invited %s.", senderDisplayname, displayname), tcell.ColorGreen) + text.Colorize(0, len(senderDisplayname), widget.GetHashColor(evt.Sender)) + text.Colorize(len(senderDisplayname)+len(" invited "), len(displayname), widget.GetHashColor(*evt.StateKey)) case "join": sender = "-->" text = tstring.NewColorTString(fmt.Sprintf("%s joined the room.", displayname), tcell.ColorGreen) - text.Colorize(0, len(displayname), widget.GetHashColor(displayname)) + text.Colorize(0, len(displayname), widget.GetHashColor(*evt.StateKey)) case "leave": sender = "<--" if evt.Sender != *evt.StateKey { reason, _ := evt.Content["reason"].(string) - text = tstring.NewColorTString(fmt.Sprintf("%s kicked %s: %s", evt.Sender, displayname, reason), tcell.ColorRed) - text.Colorize(0, len(evt.Sender), widget.GetHashColor(evt.Sender)) - text.Colorize(len(evt.Sender)+len(" kicked "), len(displayname), widget.GetHashColor(displayname)) + text = tstring.NewColorTString(fmt.Sprintf("%s kicked %s: %s", senderDisplayname, displayname, reason), tcell.ColorRed) + text.Colorize(0, len(senderDisplayname), widget.GetHashColor(evt.Sender)) + text.Colorize(len(senderDisplayname)+len(" kicked "), len(displayname), widget.GetHashColor(*evt.StateKey)) } else { text = tstring.NewColorTString(fmt.Sprintf("%s left the room.", displayname), tcell.ColorRed) - text.Colorize(0, len(displayname), widget.GetHashColor(displayname)) + text.Colorize(0, len(displayname), widget.GetHashColor(*evt.StateKey)) } } } else if displayname != prevDisplayname { sender = "---" - text = tstring.NewColorTString(fmt.Sprintf("%s changed their display name to %s.", prevDisplayname, displayname), tcell.ColorYellow) - text.Colorize(0, len(prevDisplayname), widget.GetHashColor(prevDisplayname)) - text.Colorize(len(prevDisplayname)+len(" changed their display name to "), len(displayname), widget.GetHashColor(displayname)) + text = tstring.NewColorTString(fmt.Sprintf("%s changed their display name to %s.", prevDisplayname, displayname), tcell.ColorGreen) + text.Colorize(0, len(prevDisplayname), widget.GetHashColor(*evt.StateKey)) + text.Colorize(len(prevDisplayname)+len(" changed their display name to "), len(displayname), widget.GetHashColor(*evt.StateKey)) } return } func ParseMembershipEvent(room *rooms.Room, evt *gomatrix.Event) messages.UIMessage { displayname, text := getMembershipEventContent(room, evt) + if len(text) == 0 { + return nil + } + ts := unixToTime(evt.Timestamp) return messages.NewExpandedTextMessage(evt.ID, evt.Sender, displayname, "m.room.membership", text, ts) } -- cgit v1.2.3