summaryrefslogtreecommitdiffstats
path: root/bridge/slack
diff options
context:
space:
mode:
authorWim <wim@42.be>2018-12-15 23:11:03 +0100
committerGitHub <noreply@github.com>2018-12-15 23:11:03 +0100
commit53c86702a35b3f9d12993d613d17b74ebb99258d (patch)
tree8bfdc2e115ed1f99096733f70186edd418a2e9dd /bridge/slack
parent192fe89789cb8d35b0be990b7fb9eb4ae2be9d60 (diff)
downloadmatterbridge-msglm-53c86702a35b3f9d12993d613d17b74ebb99258d.tar.gz
matterbridge-msglm-53c86702a35b3f9d12993d613d17b74ebb99258d.tar.bz2
matterbridge-msglm-53c86702a35b3f9d12993d613d17b74ebb99258d.zip
Add wait option for populateUsers/Channels (slack) Fixes #579 (#653)
When setting wait to true, we wait until the populating isn't in progress anymore. This is used on startup connections where we really need the initial information which could take a long time on big servers.
Diffstat (limited to 'bridge/slack')
-rw-r--r--bridge/slack/handlers.go10
-rw-r--r--bridge/slack/helpers.go14
-rw-r--r--bridge/slack/slack.go2
3 files changed, 16 insertions, 10 deletions
diff --git a/bridge/slack/handlers.go b/bridge/slack/handlers.go
index b9011c92..40a9666a 100644
--- a/bridge/slack/handlers.go
+++ b/bridge/slack/handlers.go
@@ -75,7 +75,7 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) {
// When we join a channel we update the full list of users as
// well as the information for the channel that we joined as this
// should now tell that we are a member of it.
- b.populateUsers()
+ b.populateUsers(false)
b.channelsMutex.Lock()
b.channelsByID[ev.Channel.ID] = &ev.Channel
@@ -83,8 +83,8 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) {
b.channelsMutex.Unlock()
case *slack.ConnectedEvent:
b.si = ev.Info
- b.populateChannels()
- b.populateUsers()
+ b.populateChannels(true)
+ b.populateUsers(true)
case *slack.InvalidAuthEvent:
b.Log.Fatalf("Invalid Token %#v", ev)
case *slack.ConnectionErrorEvent:
@@ -200,7 +200,7 @@ func (b *Bslack) handleMessageEvent(ev *slack.MessageEvent) (*config.Message, er
func (b *Bslack) handleStatusEvent(ev *slack.MessageEvent, rmsg *config.Message) bool {
switch ev.SubType {
case sChannelJoined, sMemberJoined:
- b.populateUsers()
+ b.populateUsers(false)
// There's no further processing needed on channel events
// so we return 'true'.
return true
@@ -208,7 +208,7 @@ func (b *Bslack) handleStatusEvent(ev *slack.MessageEvent, rmsg *config.Message)
rmsg.Username = sSystemUser
rmsg.Event = config.EventJoinLeave
case sChannelTopic, sChannelPurpose:
- b.populateChannels()
+ b.populateChannels(false)
rmsg.Event = config.EventTopicChange
case sMessageChanged:
rmsg.Text = ev.SubMessage.Text
diff --git a/bridge/slack/helpers.go b/bridge/slack/helpers.go
index 6f049561..fb7a25d5 100644
--- a/bridge/slack/helpers.go
+++ b/bridge/slack/helpers.go
@@ -83,15 +83,18 @@ func (b *Bslack) populateUser(userID string) {
b.usersMutex.Unlock()
}
-func (b *Bslack) populateUsers() {
+func (b *Bslack) populateUsers(wait bool) {
b.refreshMutex.Lock()
- if time.Now().Before(b.earliestUserRefresh) || b.refreshInProgress {
+ if !wait && (time.Now().Before(b.earliestUserRefresh) || b.refreshInProgress) {
b.Log.Debugf("Not refreshing user list as it was done less than %v ago.",
minimumRefreshInterval)
b.refreshMutex.Unlock()
return
}
+ for b.refreshInProgress {
+ time.Sleep(time.Second)
+ }
b.refreshInProgress = true
b.refreshMutex.Unlock()
@@ -127,14 +130,17 @@ func (b *Bslack) populateUsers() {
b.refreshInProgress = false
}
-func (b *Bslack) populateChannels() {
+func (b *Bslack) populateChannels(wait bool) {
b.refreshMutex.Lock()
- if time.Now().Before(b.earliestChannelRefresh) || b.refreshInProgress {
+ if !wait && (time.Now().Before(b.earliestChannelRefresh) || b.refreshInProgress) {
b.Log.Debugf("Not refreshing channel list as it was done less than %v seconds ago.",
minimumRefreshInterval)
b.refreshMutex.Unlock()
return
}
+ for b.refreshInProgress {
+ time.Sleep(time.Second)
+ }
b.refreshInProgress = true
b.refreshMutex.Unlock()
diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go
index 225e16e9..d8dfc62f 100644
--- a/bridge/slack/slack.go
+++ b/bridge/slack/slack.go
@@ -160,7 +160,7 @@ func (b *Bslack) JoinChannel(channel config.ChannelInfo) error {
return nil
}
- b.populateChannels()
+ b.populateChannels(false)
channelInfo, err := b.getChannel(channel.Name)
if err != nil {