Thumbnail

rani/matterbridge.git

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

commit 65933262fc36a52a29686610ea71cd6e5af779a3 Author: Wim <wim@42.be> Date: Sat Mar 02 22:58:14 2019 +0000 Do not send duplicate messages (rocketchat). Fixes #745 (#752) For an unknown reason we get duplicate messages (from the same channel) using the realtime API when we have > 1 channel subscribed on. Solution for now is caching the message ID in a LRU cache and ignoring the duplicates. This should be reviewed when we have actual editing support from the realtime API diff --git a/bridge/rocketchat/handlers.go b/bridge/rocketchat/handlers.go index b44ea46..a41004d 100644 --- a/bridge/rocketchat/handlers.go +++ b/bridge/rocketchat/handlers.go @@ -406 +4011 @@ func (b *Brocketchat) handleRocketHook(messages chan *config.Message) {    func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {   for message := range b.messageChan { + // skip messages with same ID, apparently messages get duplicated for an unknown reason + if _, ok := b.cache.Get(message.ID); ok { + continue + } + b.cache.Add(message.ID, true)   b.Log.Debugf("message %#v", message)   m := message   if b.skipMessage(&m) { diff --git a/bridge/rocketchat/rocketchat.go b/bridge/rocketchat/rocketchat.go index 82b6627..dac0564 100644 --- a/bridge/rocketchat/rocketchat.go +++ b/bridge/rocketchat/rocketchat.go @@ -916 +918 @@ import (   "github.com/42wim/matterbridge/bridge/helper"   "github.com/42wim/matterbridge/hook/rockethook"   "github.com/42wim/matterbridge/matterhook" + lru "github.com/hashicorp/golang-lru"   "github.com/matterbridge/Rocket.Chat.Go.SDK/models"   "github.com/matterbridge/Rocket.Chat.Go.SDK/realtime"   "github.com/matterbridge/Rocket.Chat.Go.SDK/rest"  )    type Brocketchat struct { - mh *matterhook.Client - rh *rockethook.Client - c *realtime.Client - r *rest.Client + mh *matterhook.Client + rh *rockethook.Client + c *realtime.Client + r *rest.Client + cache *lru.Cache   *bridge.Config   messageChan chan models.Message   channelMap map[string]string @@ -279 +2916 @@ type Brocketchat struct {  }    func New(cfg *bridge.Config) bridge.Bridger { - b := &Brocketchat{Config: cfg} - b.messageChan = make(chan models.Message) - b.channelMap = make(map[string]string) + newCache, err := lru.New(100) + if err != nil { + cfg.Log.Fatalf("Could not create LRU cache for rocketchat bridge: %v", err) + } + b := &Brocketchat{ + Config: cfg, + messageChan: make(chan models.Message), + channelMap: make(map[string]string), + cache: newCache, + }   b.Log.Debugf("enabling rocketchat")   return b  }