Cut fallback quotes out
This commit is contained in:
parent
4a5b83dff5
commit
b1135b070b
|
@ -30,6 +30,7 @@ var spaceRegex = regexp.MustCompile(`\s+`)
|
|||
var replyRegex = regexp.MustCompile("\\A>>? ?([0-9]+)\\n")
|
||||
|
||||
const newlineChar string = "\n"
|
||||
const messageHeaderSeparator string = " | "
|
||||
|
||||
// GetContactByUsername resolves username to user id retrieves user and chat information
|
||||
func (c *Client) GetContactByUsername(username string) (*client.Chat, *client.User, error) {
|
||||
|
@ -710,7 +711,15 @@ func (c *Client) contentToFile(content client.MessageContent) (*client.File, *cl
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *Client) messageToPrefix(message *client.Message, previewString string, fileString string, replyMsg *client.Message) string {
|
||||
func (c *Client) countCharsInLines(lines *[]string) (count int) {
|
||||
for _, line := range *lines {
|
||||
count += len(line)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) messageToPrefix(message *client.Message, previewString string, fileString string, replyMsg *client.Message) (string, int, int) {
|
||||
var replyStart, replyEnd int
|
||||
prefix := []string{}
|
||||
// message direction
|
||||
var directionChar string
|
||||
|
@ -734,7 +743,10 @@ func (c *Client) messageToPrefix(message *client.Message, previewString string,
|
|||
}
|
||||
// reply to
|
||||
if message.ReplyToMessageId != 0 {
|
||||
prefix = append(prefix, "reply: "+c.formatMessage(message.ChatId, message.ReplyToMessageId, true, replyMsg))
|
||||
replyStart = c.countCharsInLines(&prefix) + (len(prefix) - 1) * len(messageHeaderSeparator)
|
||||
replyLine := "reply: "+c.formatMessage(message.ChatId, message.ReplyToMessageId, true, replyMsg)
|
||||
prefix = append(prefix, replyLine)
|
||||
replyEnd = replyStart + len(replyLine) + len(messageHeaderSeparator)
|
||||
}
|
||||
if message.ForwardInfo != nil {
|
||||
prefix = append(prefix, "fwd: "+c.formatForward(message.ForwardInfo))
|
||||
|
@ -748,7 +760,7 @@ func (c *Client) messageToPrefix(message *client.Message, previewString string,
|
|||
prefix = append(prefix, "file: "+fileString)
|
||||
}
|
||||
|
||||
return strings.Join(prefix, " | ")
|
||||
return strings.Join(prefix, messageHeaderSeparator), replyStart, replyEnd
|
||||
}
|
||||
|
||||
func (c *Client) ensureDownloadFile(file *client.File) *client.File {
|
||||
|
@ -805,19 +817,26 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
|||
}
|
||||
text = oob
|
||||
} else if !c.Session.RawMessages {
|
||||
var prefix strings.Builder
|
||||
prefix.WriteString(c.messageToPrefix(message, previewName, fileName, replyMsg))
|
||||
var newText strings.Builder
|
||||
|
||||
prefix, replyStart, replyEnd := c.messageToPrefix(message, previewName, fileName, replyMsg)
|
||||
newText.WriteString(prefix)
|
||||
if reply != nil {
|
||||
reply.Start = uint64(replyStart)
|
||||
reply.End = uint64(replyEnd)
|
||||
}
|
||||
|
||||
if text != "" {
|
||||
// \n if it is groupchat and message is not empty
|
||||
if chatId < 0 {
|
||||
prefix.WriteString("\n")
|
||||
newText.WriteString("\n")
|
||||
} else if chatId > 0 {
|
||||
prefix.WriteString(" | ")
|
||||
newText.WriteString(" | ")
|
||||
}
|
||||
|
||||
prefix.WriteString(text)
|
||||
newText.WriteString(text)
|
||||
}
|
||||
text = prefix.String()
|
||||
text = newText.String()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package extensions
|
|||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"strconv"
|
||||
|
||||
"gosrc.io/xmpp/stanza"
|
||||
)
|
||||
|
@ -118,6 +119,28 @@ type Reply struct {
|
|||
Id string `xml:"id,attr"`
|
||||
}
|
||||
|
||||
// Fallback is from XEP-0428
|
||||
type Fallback struct {
|
||||
XMLName xml.Name `xml:"urn:xmpp:fallback:0 fallback"`
|
||||
For string `xml:"for,attr"`
|
||||
Body []FallbackBody
|
||||
Subject []FallbackSubject
|
||||
}
|
||||
|
||||
// FallbackBody is from XEP-0428
|
||||
type FallbackBody struct {
|
||||
XMLName xml.Name `xml:"body"`
|
||||
Start string `xml:"start,attr"`
|
||||
End string `xml:"end,attr"`
|
||||
}
|
||||
|
||||
// FallbackSubject is from XEP-0428
|
||||
type FallbackSubject struct {
|
||||
XMLName xml.Name `xml:"subject"`
|
||||
Start string `xml:"start,attr"`
|
||||
End string `xml:"end,attr"`
|
||||
}
|
||||
|
||||
// Namespace is a namespace!
|
||||
func (c PresenceNickExtension) Namespace() string {
|
||||
return c.XMLName.Space
|
||||
|
@ -143,6 +166,24 @@ func (c Reply) Namespace() string {
|
|||
return c.XMLName.Space
|
||||
}
|
||||
|
||||
// Namespace is a namespace!
|
||||
func (c Fallback) Namespace() string {
|
||||
return c.XMLName.Space
|
||||
}
|
||||
|
||||
// NewReplyFallback initializes a fallback range
|
||||
func NewReplyFallback(start uint64, end uint64) Fallback {
|
||||
return Fallback{
|
||||
For: "urn:xmpp:reply:0",
|
||||
Body: []FallbackBody{
|
||||
FallbackBody{
|
||||
Start: strconv.FormatUint(start, 10),
|
||||
End: strconv.FormatUint(end, 10),
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
// presence nick
|
||||
stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{
|
||||
|
@ -167,4 +208,10 @@ func init() {
|
|||
"urn:xmpp:reply:0",
|
||||
"reply",
|
||||
}, Reply{})
|
||||
|
||||
// fallback
|
||||
stanza.TypeRegistry.MapExtension(stanza.PKTMessage, xml.Name{
|
||||
"urn:xmpp:fallback:0",
|
||||
"fallback",
|
||||
}, Fallback{})
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ import (
|
|||
type Reply struct {
|
||||
Author string
|
||||
Id string
|
||||
Start uint64
|
||||
End uint64
|
||||
}
|
||||
|
||||
const NSNick string = "http://jabber.org/protocol/nick"
|
||||
|
@ -89,6 +91,9 @@ func sendMessageWrapper(to string, from string, body string, id string, componen
|
|||
To: reply.Author,
|
||||
Id: reply.Id,
|
||||
})
|
||||
if reply.End > 0 {
|
||||
message.Extensions = append(message.Extensions, extensions.NewReplyFallback(reply.Start, reply.End))
|
||||
}
|
||||
}
|
||||
|
||||
sendMessage(&message, component)
|
||||
|
|
Loading…
Reference in a new issue