diff options
author | ValdikSS <iam@valdikss.org.ru> | 2018-05-30 00:29:51 +0300 |
---|---|---|
committer | Wim <wim@42.be> | 2018-05-29 23:29:51 +0200 |
commit | 91db63294ced789fbcd73cad07b592ec03812f1f (patch) | |
tree | 19a5c8736d55c87cb41147a302b3ac6d62dbf28d /bridge/xmpp/xmpp.go | |
parent | fd04e08c9c99d5bc2e819c4679ff419aea8a3b71 (diff) | |
download | matterbridge-msglm-91db63294ced789fbcd73cad07b592ec03812f1f.tar.gz matterbridge-msglm-91db63294ced789fbcd73cad07b592ec03812f1f.tar.bz2 matterbridge-msglm-91db63294ced789fbcd73cad07b592ec03812f1f.zip |
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.
Diffstat (limited to 'bridge/xmpp/xmpp.go')
-rw-r--r-- | bridge/xmpp/xmpp.go | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/bridge/xmpp/xmpp.go b/bridge/xmpp/xmpp.go index 8a066751..cb0da1b2 100644 --- a/bridge/xmpp/xmpp.go +++ b/bridge/xmpp/xmpp.go @@ -6,6 +6,7 @@ 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" @@ -68,6 +69,8 @@ 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 @@ -84,12 +87,17 @@ 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) { @@ -139,6 +147,7 @@ func (b *Bxmpp) xmppKeepAlive() chan bool { func (b *Bxmpp) handleXMPP() error { var ok bool + var msgid string done := b.xmppKeepAlive() defer close(done) for { @@ -154,7 +163,11 @@ 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) @@ -181,6 +194,7 @@ 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 != "" { |