Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 21 additions & 38 deletions channels.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,15 @@ func (m *Client) JoinChannel(channelID string) error {

func (m *Client) UpdateChannelsTeam(teamID string) error {
var (
mmchannels []*model.Channel
resp *model.Response
err error
resp *model.Response
err error
)

ctx := context.TODO()

const batchSize = 200

mmchannels := make([]*model.Channel, 0, batchSize)
for {
mmchannels, resp, err = m.Client.GetChannelsForTeamForUser(ctx, teamID, m.User.Id, false, "")
if err == nil {
Expand All @@ -226,52 +228,33 @@ func (m *Client) UpdateChannelsTeam(teamID string) error {
}
}

for idx, t := range m.OtherTeams {
if t.ID == teamID {
m.Lock()
m.OtherTeams[idx].Channels = mmchannels
m.Unlock()
}
}

idx := 0
max := 200

var moreChannels []*model.Channel

moreChannels := make([]*model.Channel, 0, batchSize)
for {
mmchannels, resp, err = m.Client.GetPublicChannelsForTeam(ctx, teamID, idx, max, "")
if err == nil {
break
}

if err := m.HandleRatelimit("GetPublicChannelsForTeam", resp); err != nil {
return err
channels, resp, err := m.Client.GetPublicChannelsForTeam(ctx, teamID, idx, batchSize, "")
if err != nil {
if rlErr := m.HandleRatelimit("GetPublicChannelsForTeam", resp); rlErr != nil {
return rlErr
}
continue
}
}

for len(mmchannels) > 0 {
moreChannels = append(moreChannels, mmchannels...)

for {
mmchannels, resp, err = m.Client.GetPublicChannelsForTeam(ctx, teamID, idx, max, "")
if err == nil {
idx++

break
}
moreChannels = append(moreChannels, channels...)

if err := m.HandleRatelimit("GetPublicChannelsForTeam", resp); err != nil {
return err
}
if len(channels) < batchSize {
break
}
idx++
}

m.Lock()
defer m.Unlock()

for idx, t := range m.OtherTeams {
if t.ID == teamID {
m.Lock()
m.OtherTeams[idx].Channels = mmchannels
m.OtherTeams[idx].MoreChannels = moreChannels
m.Unlock()
break
}
}

Expand Down
26 changes: 14 additions & 12 deletions matterclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -305,40 +305,40 @@ func (m *Client) serverAlive(b *backoff.Backoff) error {
func (m *Client) initUser() error {
ctx := context.TODO()

m.Lock()
defer m.Unlock()
// we only load all team data on initial login.
// all other updates are for channels from our (primary) team only.
teams, _, err := m.Client.GetTeamsForUser(ctx, m.User.Id, "")
if err != nil {
return err
}

const batchSize = 200

for _, team := range teams {
idx := 0
max := 200
usermap := make(map[string]*model.User)
for {
mmusers, _, err := m.Client.GetUsersInTeam(ctx, team.Id, idx, batchSize, "")
if err != nil {
return err
}

mmusers, _, err := m.Client.GetUsersInTeam(ctx, team.Id, idx, max, "")
if err != nil {
return err
}

for len(mmusers) > 0 {
for _, user := range mmusers {
usermap[user.Id] = user
}

mmusers, _, err = m.Client.GetUsersInTeam(ctx, team.Id, idx, max, "")
if err != nil {
return err
if len(mmusers) < batchSize {
break
}

idx++

time.Sleep(time.Millisecond * 200)
}
m.logger.Debugf("found %d users in team %s", len(usermap), team.Name)

m.Lock()

// add all users
for k, v := range usermap {
m.Users[k] = v
Expand All @@ -356,6 +356,8 @@ func (m *Client) initUser() error {
m.Team = t
m.logger.Debugf("initUser(): found our team %s (id: %s)", team.Name, team.Id)
}

m.Unlock()
}

return nil
Expand Down
44 changes: 16 additions & 28 deletions users.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,47 +116,35 @@ func (m *Client) GetUsers() map[string]*model.User {
}

func (m *Client) UpdateUsers() error {
idx := 0
max := 200

var (
mmusers []*model.User
resp *model.Response
err error
resp *model.Response
err error
)

for {
mmusers, resp, err = m.Client.GetUsers(context.TODO(), idx, max, "")
if err == nil {
break
}
const batchSize = 200

if err = m.HandleRatelimit("GetUsers", resp); err != nil {
return err
idx := 0
mmusers := make([]*model.User, 0, batchSize)
for {
mmusers, resp, err = m.Client.GetUsers(context.TODO(), idx, batchSize, "")
if err != nil {
if rlErr := m.HandleRatelimit("GetUsers", resp); rlErr != nil {
return rlErr
}
continue
}
}

for len(mmusers) > 0 {
m.Lock()

for _, user := range mmusers {
m.Users[user.Id] = user
}

m.Unlock()

for {
mmusers, resp, err = m.Client.GetUsers(context.TODO(), idx, max, "")
if err == nil {
idx++

break
}

if err := m.HandleRatelimit("GetUsers", resp); err != nil {
return err
}
if len(mmusers) < batchSize {
break
}

idx++
}

return nil
Expand Down