diff options
Diffstat (limited to 'vendor/github.com/matterbridge/matterclient')
-rw-r--r-- | vendor/github.com/matterbridge/matterclient/channels.go | 39 | ||||
-rw-r--r-- | vendor/github.com/matterbridge/matterclient/matterclient.go | 41 |
2 files changed, 58 insertions, 22 deletions
diff --git a/vendor/github.com/matterbridge/matterclient/channels.go b/vendor/github.com/matterbridge/matterclient/channels.go index 6bf22a68..c1facf8b 100644 --- a/vendor/github.com/matterbridge/matterclient/channels.go +++ b/vendor/github.com/matterbridge/matterclient/channels.go @@ -80,7 +80,14 @@ func (m *Client) getChannelIDTeam(name string, teamID string) string { } } - return "" + // Fallback if it's not found in the t.Channels or t.MoreChannels cache. + // This also let's us join private channels. + channel, _, err := m.Client.GetChannelByName(name, teamID, "") + if err != nil { + return "" + } + + return channel.Id } func (m *Client) GetChannelName(channelID string) string { @@ -224,8 +231,13 @@ func (m *Client) UpdateChannelsTeam(teamID string) error { } } + idx := 0 + max := 200 + + var moreChannels []*model.Channel + for { - mmchannels, resp, err = m.Client.GetPublicChannelsForTeam(teamID, 0, 5000, "") + mmchannels, resp, err = m.Client.GetPublicChannelsForTeam(teamID, idx, max, "") if err == nil { break } @@ -235,10 +247,27 @@ func (m *Client) UpdateChannelsTeam(teamID string) error { } } + for len(mmchannels) > 0 { + moreChannels = append(moreChannels, mmchannels...) + + for { + mmchannels, resp, err = m.Client.GetPublicChannelsForTeam(teamID, idx, max, "") + if err == nil { + idx++ + + break + } + + if err := m.HandleRatelimit("GetPublicChannelsForTeam", resp); err != nil { + return err + } + } + } + for idx, t := range m.OtherTeams { if t.ID == teamID { m.Lock() - m.OtherTeams[idx].MoreChannels = mmchannels + m.OtherTeams[idx].MoreChannels = moreChannels m.Unlock() } } @@ -252,6 +281,10 @@ func (m *Client) UpdateChannels() error { } for _, t := range m.OtherTeams { + // We've already populated users/channels for team in the above. + if t.ID == m.Team.ID { + continue + } if err := m.UpdateChannelsTeam(t.ID); err != nil { return err } diff --git a/vendor/github.com/matterbridge/matterclient/matterclient.go b/vendor/github.com/matterbridge/matterclient/matterclient.go index 0652fe73..fe845efc 100644 --- a/vendor/github.com/matterbridge/matterclient/matterclient.go +++ b/vendor/github.com/matterbridge/matterclient/matterclient.go @@ -144,6 +144,10 @@ func (m *Client) Login() error { return err } + if err := m.initUserChannels(); err != nil { + return err + } + if m.Team == nil { validTeamNames := make([]string, len(m.OtherTeams)) for i, t := range m.OtherTeams { @@ -332,8 +336,11 @@ func (m *Client) initUser() error { time.Sleep(time.Millisecond * 200) } - - m.logger.Infof("found %d users in team %s", len(usermap), team.Name) + m.logger.Debugf("found %d users in team %s", len(usermap), team.Name) + // add all users + for k, v := range usermap { + m.Users[k] = v + } t := &Team{ Team: team, @@ -341,29 +348,25 @@ func (m *Client) initUser() error { ID: team.Id, } - mmchannels, _, err := m.Client.GetChannelsForTeamForUser(team.Id, m.User.Id, false, "") - if err != nil { - return err - } - - t.Channels = mmchannels - - mmchannels, _, err = m.Client.GetPublicChannelsForTeam(team.Id, 0, 5000, "") - if err != nil { - return err - } - - t.MoreChannels = mmchannels m.OtherTeams = append(m.OtherTeams, t) if team.Name == m.Credentials.Team { m.Team = t m.logger.Debugf("initUser(): found our team %s (id: %s)", team.Name, team.Id) } - // add all users - for k, v := range t.Users { - m.Users[k] = v - } + } + + return nil +} + +func (m *Client) initUserChannels() error { + if err := m.UpdateChannels(); err != nil { + return err + } + + for _, t := range m.OtherTeams { + m.logger.Debugf("found %d channels for user in team %s", len(t.Channels), t.Team.Name) + m.logger.Debugf("found %d public channels in team %s", len(t.MoreChannels), t.Team.Name) } return nil |