Thumbnail

rani/matterbridge.git

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

commit 665f858a0f0288736c2814951a9e3d37d41173a2 Author: Wim <wim@42.be> Date: Tue Feb 14 23:52:45 2017 +0000 Refactor. Make extra options easier for other protocols diff --git a/bridge/bridge.go b/bridge/bridge.go index c8c6ac4..db26c42 100644 --- a/bridge/bridge.go +++ b/bridge/bridge.go @@ -2516 +2517 @@ type Bridger interface {  type Bridge struct {   Config config.Protocol   Bridger - Name string - Account string - Protocol string - ChannelsOut []string - ChannelsIn []string - ChannelOptions config.ChannelOptions + Name string + Account string + Protocol string + ChannelsIn map[string]config.ChannelOptions + ChannelsOut map[string]config.ChannelOptions  }    func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Bridge {   b := new(Bridge) + b.ChannelsIn = make(map[string]config.ChannelOptions) + b.ChannelsOut = make(map[string]config.ChannelOptions)   accInfo := strings.Split(bridge.Account, ".")   protocol := accInfo[0]   name := accInfo[1] @@ -7510 +7622 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid    func (b *Bridge) JoinChannels() error {   exists := make(map[string]bool) - for _, channel := range append(b.ChannelsIn, b.ChannelsOut...) { + b.joinChannels(b.ChannelsIn, exists) + b.joinChannels(b.ChannelsOut, exists) + return nil +} + +func (b *Bridge) joinChannels(cMap map[string]config.ChannelOptions, exists map[string]bool) error { + mychannel := "" + for channel, info := range cMap {   if !exists[channel] { + mychannel = channel   log.Infof("%s: joining %s", b.Account, channel) - b.JoinChannel(channel) + if b.Protocol == "irc" && info.Key != "" { + log.Debugf("using key %s for channel %s", info.Key, channel) + mychannel = mychannel + " " + info.Key + } + b.JoinChannel(mychannel)   exists[channel] = true   }   } diff --git a/gateway/gateway.go b/gateway/gateway.go index 1957177..95bf902 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -4010 +408 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error {   }   log.Infof("Starting bridge: %s ", cfg.Account)   br := bridge.New(gw.Config, cfg, gw.Message) - br.ChannelsOut = gw.ChannelsOut[br.Account] - br.ChannelsIn = gw.ChannelsIn[br.Account] - br.ChannelOptions = gw.ChannelOptions[br.Account] - + gw.mapChannelsToBridge(br, gw.ChannelsOut) + gw.mapChannelsToBridge(br, gw.ChannelsIn)   gw.Bridges[cfg.Account] = br   err := br.Connect()   if err != nil { @@ -536 +5116 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error {   return nil  }   +func (gw *Gateway) mapChannelsToBridge(br *bridge.Bridge, cMap map[string][]string) { + for _, channel := range cMap[br.Account] { + if _, ok := gw.ChannelOptions[br.Account+channel]; ok { + br.ChannelsOut[channel] = gw.ChannelOptions[br.Account+channel] + } else { + br.ChannelsOut[channel] = config.ChannelOptions{} + } + } +} +  func (gw *Gateway) Start() error {   gw.mapChannels()   for _, br := range append(gw.MyConfig.In, append(gw.MyConfig.InOut, gw.MyConfig.Out...)...) {