refactor: preload (append to guild TreeNode) channels upon receiving READY event (#64)
This commit is contained in:
parent
80179a8246
commit
85438d0799
3 changed files with 30 additions and 55 deletions
18
discord.go
18
discord.go
|
|
@ -48,8 +48,7 @@ func onSessionReady(_ *discordgo.Session, r *discordgo.Ready) {
|
|||
})
|
||||
|
||||
for _, c := range r.PrivateChannels {
|
||||
cn := tview.NewTreeNode(genChannelRepr(c)).
|
||||
SetReference(c.ID)
|
||||
cn := tview.NewTreeNode(generateChannelRepr(c)).SetReference(c.ID)
|
||||
dmNode.AddChild(cn)
|
||||
}
|
||||
|
||||
|
|
@ -71,9 +70,20 @@ func onSessionReady(_ *discordgo.Session, r *discordgo.Ready) {
|
|||
})
|
||||
|
||||
for _, g := range r.Guilds {
|
||||
gn := tview.NewTreeNode(g.Name).
|
||||
SetReference(g.ID)
|
||||
gn := tview.NewTreeNode(g.Name).Collapse()
|
||||
n.AddChild(gn)
|
||||
|
||||
cs := g.Channels
|
||||
sort.Slice(cs, func(i, j int) bool {
|
||||
return cs[i].Position < cs[j].Position
|
||||
})
|
||||
|
||||
// Top-level channels
|
||||
createTopLevelChannelsTreeNodes(gn, cs)
|
||||
// Category channels
|
||||
createCategoryChannelsTreeNodes(gn, cs)
|
||||
// Second-level channels
|
||||
createSecondLevelChannelsTreeNodes(cs)
|
||||
}
|
||||
|
||||
channelsTree.SetCurrentNode(n)
|
||||
|
|
|
|||
65
ui.go
65
ui.go
|
|
@ -1,7 +1,6 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/atotto/clipboard"
|
||||
|
|
@ -63,71 +62,37 @@ func onChannelsTreeSelected(n *tview.TreeNode) {
|
|||
// Unhighlight the already-highlighted regions.
|
||||
messagesTextView.Highlight()
|
||||
|
||||
switch n.GetLevel() {
|
||||
case 1:
|
||||
if len(n.GetChildren()) != 0 {
|
||||
n.SetExpanded(!n.IsExpanded())
|
||||
return
|
||||
}
|
||||
|
||||
if n.GetText() == "Direct Messages" {
|
||||
return
|
||||
}
|
||||
|
||||
gID := n.GetReference().(string)
|
||||
g, err := session.State.Guild(gID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
cs := g.Channels
|
||||
sort.Slice(cs, func(i, j int) bool {
|
||||
return cs[i].Position < cs[j].Position
|
||||
})
|
||||
|
||||
// Top-level channels
|
||||
createTopLevelChannelsTreeNodes(n, cs)
|
||||
// Category channels
|
||||
createCategoryChannelsTreeNodes(n, cs)
|
||||
// Second-level channels
|
||||
createSecondLevelChannelsTreeNodes(cs)
|
||||
default:
|
||||
if len(n.GetChildren()) != 0 {
|
||||
n.SetExpanded(!n.IsExpanded())
|
||||
} else {
|
||||
cID := n.GetReference().(string)
|
||||
c, err := session.State.Channel(cID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if c.Type == discordgo.ChannelTypeGuildCategory {
|
||||
n.SetExpanded(!n.IsExpanded())
|
||||
} else if c.Type == discordgo.ChannelTypeGuildNews || c.Type == discordgo.ChannelTypeGuildText {
|
||||
selectedChannel = c
|
||||
app.SetFocus(messageInputField)
|
||||
selectedChannel = c
|
||||
app.SetFocus(messageInputField)
|
||||
|
||||
title := genChannelRepr(c)
|
||||
switch c.Type {
|
||||
case discordgo.ChannelTypeGuildText, discordgo.ChannelTypeGuildNews:
|
||||
title := generateChannelRepr(c)
|
||||
if c.Topic != "" {
|
||||
title += " - " + c.Topic
|
||||
}
|
||||
messagesTextView.
|
||||
Clear().
|
||||
SetTitle(title)
|
||||
|
||||
go renderMessages(c.ID)
|
||||
} else if c.Type == discordgo.ChannelTypeDM || c.Type == discordgo.ChannelTypeGroupDM {
|
||||
selectedChannel = c
|
||||
app.SetFocus(messageInputField)
|
||||
|
||||
messagesTextView.
|
||||
Clear().
|
||||
SetTitle(genChannelRepr(c))
|
||||
|
||||
go renderMessages(c.ID)
|
||||
messagesTextView.SetTitle(title)
|
||||
case discordgo.ChannelTypeDM, discordgo.ChannelTypeGroupDM:
|
||||
messagesTextView.SetTitle(generateChannelRepr(c))
|
||||
}
|
||||
|
||||
messagesTextView.Clear()
|
||||
go renderMessages(c.ID)
|
||||
}
|
||||
}
|
||||
|
||||
func newTextChannelTreeNode(c *discordgo.Channel) *tview.TreeNode {
|
||||
n := tview.NewTreeNode("[::d]" + genChannelRepr(c) + "[::-]").
|
||||
n := tview.NewTreeNode("[::d]" + generateChannelRepr(c) + "[::-]").
|
||||
SetReference(c.ID)
|
||||
|
||||
return n
|
||||
|
|
|
|||
2
util.go
2
util.go
|
|
@ -6,7 +6,7 @@ import (
|
|||
"github.com/ayntgl/discordgo"
|
||||
)
|
||||
|
||||
func genChannelRepr(c *discordgo.Channel) string {
|
||||
func generateChannelRepr(c *discordgo.Channel) string {
|
||||
var repr string
|
||||
if c.Name != "" {
|
||||
repr = "#" + c.Name
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue