Thumbnail

rani/matterbridge.git

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

commit 257dd3fc3fcef06722a4040957731c12b38b668c Author: Wim <wim@42.be> Date: Sun Nov 25 10:35:35 2018 +0000 Add option to ignore failing bridge on start. Fixes #455 (#603) diff --git a/bridge/config/config.go b/bridge/config/config.go index 064f04a..48c36d9 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -726 +727 @@ type Protocol struct {   EditSuffix string // mattermost, slack, discord, telegram, gitter   EditDisable bool // mattermost, slack, discord, telegram, gitter   IconURL string // mattermost, slack + IgnoreFailureOnStart bool // general   IgnoreNicks string // all protocols   IgnoreMessages string // all protocols   Jid string // xmpp diff --git a/gateway/router.go b/gateway/router.go index 99b3437..13e8ddd 100644 --- a/gateway/router.go +++ b/gateway/router.go @@ -5417 +5446 @@ func (r *Router) Start() error {   flog.Infof("Starting bridge: %s ", br.Account)   err := br.Connect()   if err != nil { - return fmt.Errorf("Bridge %s failed to start: %v", br.Account, err) + e := fmt.Errorf("Bridge %s failed to start: %v", br.Account, err) + if r.disableBridge(br, e) { + continue + } + return e   }   err = br.JoinChannels()   if err != nil { - return fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err) + e := fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err) + if r.disableBridge(br, e) { + continue + } + return e + } + } + // remove unused bridges + for _, gw := range r.Gateways { + for i, br := range gw.Bridges { + if br.Bridger == nil { + flog.Errorf("removing failed bridge %s", i) + delete(gw.Bridges, i) + }   }   }   go r.handleReceive()   return nil  }   +// disableBridge returns true and empties a bridge if we have IgnoreFailureOnStart configured +// otherwise returns false +func (r *Router) disableBridge(br *bridge.Bridge, err error) bool { + if r.BridgeValues().General.IgnoreFailureOnStart { + flog.Error(err) + // setting this bridge empty + *br = bridge.Bridge{} + return true + } + return false +} +  func (r *Router) getBridge(account string) *bridge.Bridge {   for _, gw := range r.Gateways {   if br, ok := gw.Bridges[account]; ok { diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index a4179b0..3bad9f4 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -13036 +130312 @@ MediaDownloadSize=1000000  #OPTIONAL (default empty)  MediaDownloadBlacklist=[".html$",".htm$"]   +#IgnoreFailureOnStart allows you to ignore failing bridges on startup. +#Matterbridge will disable the failed bridge and continue with the other ones. +#Context: https://github.com/42wim/matterbridge/issues/455 +#OPTIONAL (default false) +IgnoreFailureOnStart=false +  ###################################################################  #Gateway configuration  ###################################################################