diff options
author | Tulir Asokan <tulir@maunium.net> | 2019-01-11 23:28:47 +0200 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2019-01-11 23:28:47 +0200 |
commit | 331597b9f8a7942cbcb233a328301e4d5bf94fb0 (patch) | |
tree | 5ec624585ebf66c63549a098acb6f7421f1193a7 /vendor/maunium.net/go/mautrix/reply.go | |
parent | 2fc3378b717f40f37f3a188b68407887242d9c06 (diff) |
Switch to Go modules and make other changes
Diffstat (limited to 'vendor/maunium.net/go/mautrix/reply.go')
-rw-r--r-- | vendor/maunium.net/go/mautrix/reply.go | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/vendor/maunium.net/go/mautrix/reply.go b/vendor/maunium.net/go/mautrix/reply.go deleted file mode 100644 index 5e3af92..0000000 --- a/vendor/maunium.net/go/mautrix/reply.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2018 Tulir Asokan -package mautrix - -import ( - "fmt" - "regexp" - "strings" - - "golang.org/x/net/html" -) - -var HTMLReplyFallbackRegex = regexp.MustCompile(`^<mx-reply>[\s\S]+?</mx-reply>`) - -func TrimReplyFallbackHTML(html string) string { - return HTMLReplyFallbackRegex.ReplaceAllString(html, "") -} - -func TrimReplyFallbackText(text string) string { - if !strings.HasPrefix(text, "> ") || !strings.Contains(text, "\n") { - return text - } - - lines := strings.Split(text, "\n") - for len(lines) > 0 && strings.HasPrefix(lines[0], "> ") { - lines = lines[1:] - } - return strings.TrimSpace(strings.Join(lines, "\n")) -} - -func (content *Content) RemoveReplyFallback() { - if len(content.GetReplyTo()) > 0 { - if content.Format == FormatHTML { - content.FormattedBody = TrimReplyFallbackHTML(content.FormattedBody) - } - content.Body = TrimReplyFallbackText(content.Body) - } -} - -func (content *Content) GetReplyTo() string { - if content.RelatesTo != nil { - return content.RelatesTo.InReplyTo.EventID - } - return "" -} - -const ReplyFormat = `<mx-reply><blockquote> -<a href="https://matrix.to/#/%s/%s">In reply to</a> -<a href="https://matrix.to/#/%s">%s</a> -%s -</blockquote></mx-reply> -` - -func (evt *Event) GenerateReplyFallbackHTML() string { - body := evt.Content.FormattedBody - if len(body) == 0 { - body = html.EscapeString(evt.Content.Body) - } - - senderDisplayName := evt.Sender - - return fmt.Sprintf(ReplyFormat, evt.RoomID, evt.ID, evt.Sender, senderDisplayName, body) -} - -func (evt *Event) GenerateReplyFallbackText() string { - body := evt.Content.Body - lines := strings.Split(strings.TrimSpace(body), "\n") - firstLine, lines := lines[0], lines[1:] - - senderDisplayName := evt.Sender - - var fallbackText strings.Builder - fmt.Fprintf(&fallbackText, "> <%s> %s", senderDisplayName, firstLine) - for _, line := range lines { - fmt.Fprintf(&fallbackText, "\n> %s", line) - } - fallbackText.WriteString("\n\n") - return fallbackText.String() -} - -func (content *Content) SetReply(inReplyTo *Event) { - if content.RelatesTo == nil { - content.RelatesTo = &RelatesTo{} - } - content.RelatesTo.InReplyTo = InReplyTo{ - EventID: inReplyTo.ID, - RoomID: inReplyTo.RoomID, - } - - if content.MsgType == MsgText || content.MsgType == MsgNotice { - if len(content.FormattedBody) == 0 || content.Format != FormatHTML { - content.FormattedBody = html.EscapeString(content.Body) - content.Format = FormatHTML - } - content.FormattedBody = inReplyTo.GenerateReplyFallbackHTML() + content.FormattedBody - content.Body = inReplyTo.GenerateReplyFallbackText() + content.Body - } -} |