Do not ack with edited message to the XEP-0308 sender resource
This commit is contained in:
parent
959dc061ff
commit
e954c73bd2
|
@ -214,7 +214,6 @@ func (c *Client) updateNewMessage(update *client.UpdateNewMessage) {
|
||||||
} else {
|
} else {
|
||||||
log.Infof("Couldn't retrieve XMPP message ids for %v, an echo may happen", update.Message.Id)
|
log.Infof("Couldn't retrieve XMPP message ids for %v, an echo may happen", update.Message.Id)
|
||||||
}
|
}
|
||||||
log.Warnf("xmppId: %v, ignoredResource: %v", xmppId, ignoredResource)
|
|
||||||
|
|
||||||
// guarantee sequential message delivering per chat
|
// guarantee sequential message delivering per chat
|
||||||
lock := c.getChatMessageLock(chatId)
|
lock := c.getChatMessageLock(chatId)
|
||||||
|
@ -233,6 +232,24 @@ func (c *Client) updateNewMessage(update *client.UpdateNewMessage) {
|
||||||
// message content updated
|
// message content updated
|
||||||
func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
|
func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
|
||||||
markupFunction := formatter.EntityToXEP0393
|
markupFunction := formatter.EntityToXEP0393
|
||||||
|
|
||||||
|
c.SendMessageLock.Lock()
|
||||||
|
c.SendMessageLock.Unlock()
|
||||||
|
xmppId, err := gateway.IdsDB.GetByTgIds(c.Session.Login, c.jid, update.ChatId, update.MessageId)
|
||||||
|
var ignoredResource string
|
||||||
|
if err == nil {
|
||||||
|
ignoredResource = c.popFromOutbox(xmppId)
|
||||||
|
} else {
|
||||||
|
log.Infof("Couldn't retrieve XMPP message ids for %v, an echo may happen", update.MessageId)
|
||||||
|
}
|
||||||
|
log.Infof("ignoredResource: %v", ignoredResource)
|
||||||
|
|
||||||
|
jids := c.getCarbonFullJids(true, ignoredResource)
|
||||||
|
if len(jids) == 0 {
|
||||||
|
log.Info("The only resource is ignored, aborting")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if update.NewContent.MessageContentType() == client.TypeMessageText {
|
if update.NewContent.MessageContentType() == client.TypeMessageText {
|
||||||
textContent := update.NewContent.(*client.MessageText)
|
textContent := update.NewContent.(*client.MessageText)
|
||||||
var editChar string
|
var editChar string
|
||||||
|
@ -246,7 +263,9 @@ func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
|
||||||
textContent.Text.Entities,
|
textContent.Text.Entities,
|
||||||
markupFunction,
|
markupFunction,
|
||||||
))
|
))
|
||||||
gateway.SendMessage(c.jid, strconv.FormatInt(update.ChatId, 10), text, "e"+strconv.FormatInt(update.MessageId, 10), c.xmpp, nil, false)
|
for _, jid := range jids {
|
||||||
|
gateway.SendMessage(jid, strconv.FormatInt(update.ChatId, 10), text, "e"+strconv.FormatInt(update.MessageId, 10), c.xmpp, nil, false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -891,7 +891,6 @@ func (c *Client) ensureDownloadFile(file *client.File) *client.File {
|
||||||
|
|
||||||
// ProcessIncomingMessage transfers a message to XMPP side and marks it as read on Telegram side
|
// ProcessIncomingMessage transfers a message to XMPP side and marks it as read on Telegram side
|
||||||
func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message, ignoredResource string) {
|
func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message, ignoredResource string) {
|
||||||
var jids []string
|
|
||||||
var isPM bool
|
var isPM bool
|
||||||
var err error
|
var err error
|
||||||
if gateway.MessageOutgoingPermission && c.Session.Carbons {
|
if gateway.MessageOutgoingPermission && c.Session.Carbons {
|
||||||
|
@ -900,21 +899,13 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message, i
|
||||||
log.Errorf("Could not determine if chat is PM: %v", err)
|
log.Errorf("Could not determine if chat is PM: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isOutgoing := message.IsOutgoing
|
isOutgoing := message.IsOutgoing
|
||||||
isCarbon := isPM && isOutgoing
|
isCarbon := isPM && isOutgoing
|
||||||
log.Warnf("isOutgoing: %v", isOutgoing)
|
jids := c.getCarbonFullJids(isOutgoing, ignoredResource)
|
||||||
if isOutgoing {
|
if len(jids) == 0 {
|
||||||
for resource := range c.resourcesRange() {
|
log.Info("The only resource is ignored, aborting")
|
||||||
if ignoredResource == "" || resource != ignoredResource {
|
return
|
||||||
jids = append(jids, c.jid+"/"+resource)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(jids) == 0 {
|
|
||||||
log.Info("The only resource is ignored, aborting")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
jids = []string{c.jid}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var text, oob, auxText string
|
var text, oob, auxText string
|
||||||
|
@ -1379,3 +1370,17 @@ func (c *Client) popFromOutbox(xmppId string) string {
|
||||||
}
|
}
|
||||||
return resource
|
return resource
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) getCarbonFullJids(isOutgoing bool, ignoredResource string) []string {
|
||||||
|
var jids []string
|
||||||
|
if isOutgoing {
|
||||||
|
for resource := range c.resourcesRange() {
|
||||||
|
if ignoredResource == "" || resource != ignoredResource {
|
||||||
|
jids = append(jids, c.jid+"/"+resource)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
jids = []string{c.jid}
|
||||||
|
}
|
||||||
|
return jids
|
||||||
|
}
|
||||||
|
|
|
@ -177,13 +177,14 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to replace id %v with %v %v", replace.Id, msg.Id, tgMessageId)
|
log.Errorf("Failed to replace id %v with %v %v", replace.Id, msg.Id, tgMessageId)
|
||||||
} */
|
} */
|
||||||
|
session.AddToOutbox(replace.Id, resource)
|
||||||
} else {
|
} else {
|
||||||
err = gateway.IdsDB.Set(session.Session.Login, bare, toID, tgMessageId, msg.Id)
|
err = gateway.IdsDB.Set(session.Session.Login, bare, toID, tgMessageId, msg.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to save ids %v/%v %v", toID, tgMessageId, msg.Id)
|
log.Errorf("Failed to save ids %v/%v %v", toID, tgMessageId, msg.Id)
|
||||||
}
|
}
|
||||||
|
session.AddToOutbox(msg.Id, resource)
|
||||||
}
|
}
|
||||||
session.AddToOutbox(msg.Id, resource)
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
// if a message failed to edit on Telegram side, match new XMPP ID with old Telegram ID anyway
|
// if a message failed to edit on Telegram side, match new XMPP ID with old Telegram ID anyway
|
||||||
|
|
Loading…
Reference in a new issue