Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 34406d0e87a9f0b350f6b5d7719060dacd1b2c3e Author: ValdikSS <iam@valdikss.org.ru> Date: Wed May 30 00:29:51 2018 +0000 Add message correction support for XMPP (#437) It works worse than it could be, since message correction in XMPP works differently compared to other messengers. XMPP replaces old message with old ID with new message with new ID. Matterbridge remembers only old ID, that's why you can edit a message from XMPP to the gateway only once. Edited messages from other networks to XMPP are handled correctly though. diff --git a/bridge/xmpp/xmpp.go b/bridge/xmpp/xmpp.go index 8a06675..cb0da1b 100644 --- a/bridge/xmpp/xmpp.go +++ b/bridge/xmpp/xmpp.go @@ -66 +67 @@ import (   "github.com/42wim/matterbridge/bridge/config"   "github.com/42wim/matterbridge/bridge/helper"   "github.com/jpillora/backoff" + "github.com/rs/xid"   "github.com/matterbridge/go-xmpp"   "strings"   "time" @@ -686 +698 @@ func (b *Bxmpp) JoinChannel(channel config.ChannelInfo) error {  }    func (b *Bxmpp) Send(msg config.Message) (string, error) { + var msgid = "" + var msgreplaceid = ""   // ignore delete messages   if msg.Event == config.EVENT_MSG_DELETE {   return "", nil @@ -8412 +8717 @@ func (b *Bxmpp) Send(msg config.Message) (string, error) {   }   }   + msgid = xid.New().String() + if msg.ID != "" { + msgid = msg.ID + msgreplaceid = msg.ID + }   // Post normal message - _, err := b.xc.Send(xmpp.Chat{Type: "groupchat", Remote: msg.Channel + "@" + b.GetString("Muc"), Text: msg.Username + msg.Text}) + _, err := b.xc.Send(xmpp.Chat{Type: "groupchat", Remote: msg.Channel + "@" + b.GetString("Muc"), Text: msg.Username + msg.Text, ID: msgid, ReplaceID: msgreplaceid})   if err != nil {   return "", err   } - return "", nil + return msgid, nil  }    func (b *Bxmpp) createXMPP() (*xmpp.Client, error) { @@ -1396 +1477 @@ func (b *Bxmpp) xmppKeepAlive() chan bool {    func (b *Bxmpp) handleXMPP() error {   var ok bool + var msgid string   done := b.xmppKeepAlive()   defer close(done)   for { @@ -1547 +16311 @@ func (b *Bxmpp) handleXMPP() error {   if b.skipMessage(v) {   continue   } - rmsg := config.Message{Username: b.parseNick(v.Remote), Text: v.Text, Channel: b.parseChannel(v.Remote), Account: b.Account, UserID: v.Remote} + msgid = v.ID + if v.ReplaceID != "" { + msgid = v.ReplaceID + } + rmsg := config.Message{Username: b.parseNick(v.Remote), Text: v.Text, Channel: b.parseChannel(v.Remote), Account: b.Account, UserID: v.Remote, ID: msgid}     // check if we have an action event   rmsg.Text, ok = b.replaceAction(rmsg.Text) @@ -1816 +1947 @@ func (b *Bxmpp) replaceAction(text string) (string, bool) {  // handleUploadFile handles native upload of files  func (b *Bxmpp) handleUploadFile(msg *config.Message) (string, error) {   var urldesc = "" +   for _, f := range msg.Extra["file"] {   fi := f.(config.FileInfo)   if fi.Comment != "" {