feat(ui): implement guild folders (#182)

This commit is contained in:
ayntgl 2022-08-19 17:15:07 +05:30 • committed by GitHub
parent b046babeb3
commit 3f124bebec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 18 deletions

View file

@ -2,7 +2,6 @@ package ui
import (
"context"
"sort"
"strings"
"github.com/ayntgl/discordo/config"
@ -111,26 +110,53 @@ func (app *App) DrawMainFlex() {
}
func (app *App) onStateReady(r *gateway.ReadyEvent) {
sort.Slice(r.Guilds, func(a, b int) bool {
found := false
for _, guildID := range r.UserSettings.GuildPositions {
if found && guildID == r.Guilds[b].ID {
return true
rootNode := app.GuildsTree.GetRoot()
for _, gf := range r.UserSettings.GuildFolders {
if gf.ID == 0 {
for _, gID := range gf.GuildIDs {
g, err := app.State.Cabinet.Guild(gID)
if err != nil {
return
}
guildNode := tview.NewTreeNode(g.Name)
guildNode.SetReference(g.ID)
rootNode.AddChild(guildNode)
}
if !found && guildID == r.Guilds[a].ID {
found = true
} else {
var b strings.Builder
if gf.Color != discord.NullColor {
b.WriteByte('[')
b.WriteString(gf.Color.String())
b.WriteByte(']')
} else {
b.WriteString("[#ED4245]")
}
if gf.Name != "" {
b.WriteString(gf.Name)
} else {
b.WriteString("Folder")
}
b.WriteString("[-]")
folderNode := tview.NewTreeNode(b.String())
rootNode.AddChild(folderNode)
for _, gID := range gf.GuildIDs {
g, err := app.State.Cabinet.Guild(gID)
if err != nil {
return
}
guildNode := tview.NewTreeNode(g.Name)
guildNode.SetReference(g.ID)
folderNode.AddChild(guildNode)
}
}
return false
})
rootNode := app.GuildsTree.GetRoot()
for _, g := range r.Guilds {
guildNode := tview.NewTreeNode(g.Name)
guildNode.SetReference(g.ID)
rootNode.AddChild(guildNode)
}
app.GuildsTree.SetCurrentNode(rootNode)

View file

@ -43,7 +43,7 @@ func (ct *ChannelsTree) onSelected(node *tview.TreeNode) {
return
}
// If the channel is a category channel, expend the selected node if it is not expanded already.
// If the channel is a category channel, expand the selected node if it is collapsed, otherwise collapse.
if c.Type == discord.GuildCategory {
node.SetExpanded(!node.IsExpanded())
return

View file

@ -44,6 +44,12 @@ func (gt *GuildsTree) onSelected(node *tview.TreeNode) {
SetTitle("")
gt.app.MessageInputField.SetText("")
// If the selected node has children (guild folder), expand the selected node if it is collapsed, otherwise collapse.
if len(node.GetChildren()) != 0 {
node.SetExpanded(!node.IsExpanded())
return
}
ref := node.GetReference()
// If the reference of the selected node is nil, it must be the direct messages node.
if ref == nil {