Compare commits
1 Commits
master
...
presence-o
Author | SHA1 | Date | |
---|---|---|---|
|
825e88b407 |
@ -50,8 +50,15 @@ var actionMap = map[string]func(*context.AppContext){
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RegisterEventHandlers(ctx *context.AppContext) {
|
func RegisterEventHandlers(ctx *context.AppContext) {
|
||||||
|
|
||||||
|
// Keyboard events
|
||||||
eventHandler(ctx)
|
eventHandler(ctx)
|
||||||
|
|
||||||
|
// RTM incoming events
|
||||||
messageHandler(ctx)
|
messageHandler(ctx)
|
||||||
|
|
||||||
|
// User presence
|
||||||
|
go actionSetPresenceAll(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// eventHandler will handle events created by the user
|
// eventHandler will handle events created by the user
|
||||||
@ -444,6 +451,24 @@ func actionSetPresence(ctx *context.AppContext, channelID string, presence strin
|
|||||||
termui.Render(ctx.View.Channels)
|
termui.Render(ctx.View.Channels)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// actionPresenceAll will set the presence of the user list. Because the
|
||||||
|
// requests to the endpoint are rate limited we implement a timeout here.
|
||||||
|
func actionSetPresenceAll(ctx *context.AppContext) {
|
||||||
|
for _, chn := range ctx.Service.Conversations {
|
||||||
|
if chn.IsIM {
|
||||||
|
|
||||||
|
presence, err := ctx.Service.GetUserPresence(chn.User)
|
||||||
|
if err != nil {
|
||||||
|
presence = "away"
|
||||||
|
}
|
||||||
|
ctx.View.Channels.SetPresence(chn.ID, presence)
|
||||||
|
|
||||||
|
termui.Render(ctx.View.Channels)
|
||||||
|
time.Sleep(1200 * time.Millisecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func actionScrollUpChat(ctx *context.AppContext) {
|
func actionScrollUpChat(ctx *context.AppContext) {
|
||||||
ctx.View.Chat.ScrollUp()
|
ctx.View.Chat.ScrollUp()
|
||||||
termui.Render(ctx.View.Chat)
|
termui.Render(ctx.View.Chat)
|
||||||
|
@ -173,6 +173,8 @@ func (s *SlackService) GetChannels() ([]components.ChannelItem, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: user presence is set in the event handler by the function
|
||||||
|
// `actionSetPresenceAll`, that is why we set the presence to away
|
||||||
if chn.IsIM {
|
if chn.IsIM {
|
||||||
// Check if user is deleted, we do this by checking the user id,
|
// Check if user is deleted, we do this by checking the user id,
|
||||||
// and see if we have the user in the UserCache
|
// and see if we have the user in the UserCache
|
||||||
@ -183,24 +185,12 @@ func (s *SlackService) GetChannels() ([]components.ChannelItem, error) {
|
|||||||
|
|
||||||
chanItem.Name = name
|
chanItem.Name = name
|
||||||
chanItem.Type = components.ChannelTypeIM
|
chanItem.Type = components.ChannelTypeIM
|
||||||
|
chanItem.Presence = "away"
|
||||||
|
|
||||||
buckets[3][chn.User] = &tempChan{
|
buckets[3][chn.User] = &tempChan{
|
||||||
channelItem: chanItem,
|
channelItem: chanItem,
|
||||||
slackChannel: chn,
|
slackChannel: chn,
|
||||||
}
|
}
|
||||||
|
|
||||||
wg.Add(1)
|
|
||||||
go func(user string, buckets map[int]map[string]*tempChan) {
|
|
||||||
defer wg.Done()
|
|
||||||
|
|
||||||
presence, err := s.GetUserPresence(user)
|
|
||||||
if err != nil {
|
|
||||||
buckets[3][user].channelItem.Presence = "away"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
buckets[3][user].channelItem.Presence = presence
|
|
||||||
}(chn.User, buckets)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user