diff --git a/internal/ui/chat/guilds_tree.go b/internal/ui/chat/guilds_tree.go index b7832c3..821147b 100644 --- a/internal/ui/chat/guilds_tree.go +++ b/internal/ui/chat/guilds_tree.go @@ -74,6 +74,19 @@ func (gt *guildsTree) resetNodeIndex() { gt.dmRootNode = nil } +func (gt *guildsTree) updateDMNodeStyle(userID discord.UserID) { + channel, err := gt.chat.state.Cabinet.CreatePrivateChannel(userID) + if err != nil { + return + } + + node, ok := gt.channelNodeByID[channel.ID] + if node == nil || !ok { + return + } + gt.setNodeLineStyle(node, gt.channelNodeStyle(*channel)) +} + func (gt *guildsTree) createFolderNode(folder gateway.GuildFolder, guildsByID map[discord.GuildID]*gateway.GuildCreateEvent) { name := "Folder" if folder.Name != "" { diff --git a/internal/ui/chat/model.go b/internal/ui/chat/model.go index b7d96a7..1343ea0 100644 --- a/internal/ui/chat/model.go +++ b/internal/ui/chat/model.go @@ -264,6 +264,8 @@ func (m *Model) Update(msg tview.Msg) tview.Cmd { return tview.Batch(m.onMessageCreate(eventMsg), m.listen()) case *gateway.MessageUpdateEvent: m.onMessageUpdate(eventMsg) + case *gateway.PresenceUpdateEvent: + m.onPresenceUpdate(eventMsg) case *gateway.MessageDeleteEvent: m.onMessageDelete(eventMsg) diff --git a/internal/ui/chat/state.go b/internal/ui/chat/state.go index 63c0472..264688a 100644 --- a/internal/ui/chat/state.go +++ b/internal/ui/chat/state.go @@ -115,6 +115,10 @@ func (m *Model) notify(message gateway.MessageCreateEvent) tview.Cmd { } } +func (m *Model) onPresenceUpdate(presence *gateway.PresenceUpdateEvent) { + m.guildsTree.updateDMNodeStyle(presence.User.ID) +} + func (m *Model) onMessageUpdate(message *gateway.MessageUpdateEvent) { selectedChannel, ok := m.SelectedChannel() if !ok || selectedChannel.ID != message.ChannelID {