diff options
Diffstat (limited to 'matterclient/users.go')
-rw-r--r-- | matterclient/users.go | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/matterclient/users.go b/matterclient/users.go new file mode 100644 index 00000000..3dea7ce5 --- /dev/null +++ b/matterclient/users.go @@ -0,0 +1,154 @@ +package matterclient + +import ( + "errors" + + "github.com/mattermost/mattermost-server/model" +) + +func (m *MMClient) GetNickName(userId string) string { //nolint:golint + user := m.GetUser(userId) + if user != nil { + return user.Nickname + } + return "" +} + +func (m *MMClient) GetStatus(userId string) string { //nolint:golint + res, resp := m.Client.GetUserStatus(userId, "") + if resp.Error != nil { + return "" + } + if res.Status == model.STATUS_AWAY { + return "away" + } + if res.Status == model.STATUS_ONLINE { + return "online" + } + return "offline" +} + +func (m *MMClient) GetStatuses() map[string]string { + var ids []string + statuses := make(map[string]string) + for id := range m.Users { + ids = append(ids, id) + } + res, resp := m.Client.GetUsersStatusesByIds(ids) + if resp.Error != nil { + return statuses + } + for _, status := range res { + statuses[status.UserId] = "offline" + if status.Status == model.STATUS_AWAY { + statuses[status.UserId] = "away" + } + if status.Status == model.STATUS_ONLINE { + statuses[status.UserId] = "online" + } + } + return statuses +} + +func (m *MMClient) GetTeamId() string { //nolint:golint + return m.Team.Id +} + +// GetTeamName returns the name of the specified teamId +func (m *MMClient) GetTeamName(teamId string) string { //nolint:golint + m.RLock() + defer m.RUnlock() + for _, t := range m.OtherTeams { + if t.Id == teamId { + return t.Team.Name + } + } + return "" +} + +func (m *MMClient) GetUser(userId string) *model.User { //nolint:golint + m.Lock() + defer m.Unlock() + _, ok := m.Users[userId] + if !ok { + res, resp := m.Client.GetUser(userId, "") + if resp.Error != nil { + return nil + } + m.Users[userId] = res + } + return m.Users[userId] +} + +func (m *MMClient) GetUserName(userId string) string { //nolint:golint + user := m.GetUser(userId) + if user != nil { + return user.Username + } + return "" +} + +func (m *MMClient) GetUsers() map[string]*model.User { + users := make(map[string]*model.User) + m.RLock() + defer m.RUnlock() + for k, v := range m.Users { + users[k] = v + } + return users +} + +func (m *MMClient) UpdateUsers() error { + mmusers, resp := m.Client.GetUsers(0, 50000, "") + if resp.Error != nil { + return errors.New(resp.Error.DetailedError) + } + m.Lock() + for _, user := range mmusers { + m.Users[user.Id] = user + } + m.Unlock() + return nil +} + +func (m *MMClient) UpdateUserNick(nick string) error { + user := m.User + user.Nickname = nick + _, resp := m.Client.UpdateUser(user) + if resp.Error != nil { + return resp.Error + } + return nil +} + +func (m *MMClient) UsernamesInChannel(channelId string) []string { //nolint:golint + res, resp := m.Client.GetChannelMembers(channelId, 0, 50000, "") + if resp.Error != nil { + m.log.Errorf("UsernamesInChannel(%s) failed: %s", channelId, resp.Error) + return []string{} + } + allusers := m.GetUsers() + result := []string{} + for _, member := range *res { + result = append(result, allusers[member.UserId].Nickname) + } + return result +} + +func (m *MMClient) UpdateStatus(userId string, status string) error { //nolint:golint + _, resp := m.Client.UpdateUserStatus(userId, &model.Status{Status: status}) + if resp.Error != nil { + return resp.Error + } + return nil +} + +func (m *MMClient) UpdateUser(userId string) { //nolint:golint + m.Lock() + defer m.Unlock() + res, resp := m.Client.GetUser(userId, "") + if resp.Error != nil { + return + } + m.Users[userId] = res +} |