This commit is contained in:
ayn2op 2024-04-03 03:21:01 +05:30
parent 7718781b0b
commit bf0c54e555
2 changed files with 33 additions and 37 deletions

View file

@ -15,19 +15,18 @@ import (
type GuildsTree struct {
*tview.TreeView
root *tview.TreeNode
selectedChannelID discord.ChannelID
}
func newGuildsTree() *GuildsTree {
gt := &GuildsTree{
TreeView: tview.NewTreeView(),
root: tview.NewTreeNode(""),
}
root := tview.NewTreeNode("")
gt.SetRoot(root)
gt.SetTopLevel(1)
gt.SetRoot(gt.root)
gt.SetGraphics(cfg.Theme.GuildsTree.Graphics)
gt.SetBackgroundColor(tcell.GetColor(cfg.Theme.BackgroundColor))
gt.SetSelectedFunc(gt.onSelected)
@ -45,33 +44,34 @@ func newGuildsTree() *GuildsTree {
return gt
}
func (gt *GuildsTree) createGuildFolderNode(parent *tview.TreeNode, gf gateway.GuildFolder) {
func (gt *GuildsTree) createFolderNode(folder gateway.GuildFolder) {
var name string
if gf.Name != "" {
name = fmt.Sprintf("[%s]%s[-]", gf.Color.String(), gf.Name)
} else {
if folder.Name == "" {
name = "Folder"
} else {
name = fmt.Sprintf("[%s]%s[-]", folder.Color.String(), folder.Name)
}
n := tview.NewTreeNode(name)
n.SetExpanded(cfg.Theme.GuildsTree.AutoExpandFolders)
parent.AddChild(n)
root := gt.GetRoot()
folderNode := tview.NewTreeNode(name)
folderNode.SetExpanded(cfg.Theme.GuildsTree.AutoExpandFolders)
root.AddChild(folderNode)
for _, gid := range gf.GuildIDs {
g, err := discordState.Cabinet.Guild(gid)
for _, gID := range folder.GuildIDs {
g, err := discordState.Cabinet.Guild(gID)
if err != nil {
log.Printf("guild %v not found in state: %v", gid, err)
log.Printf("guild %v not found in state: %v\n", gID, err)
continue
}
gt.createGuildNode(n, *g)
gt.createGuildNode(folderNode, *g)
}
}
func (gt *GuildsTree) createGuildNode(n *tview.TreeNode, g discord.Guild) {
gn := tview.NewTreeNode(g.Name)
gn.SetReference(g.ID)
n.AddChild(gn)
guildNode := tview.NewTreeNode(g.Name)
guildNode.SetReference(g.ID)
n.AddChild(guildNode)
}
func (gt *GuildsTree) channelToString(c discord.Channel) string {
@ -121,10 +121,10 @@ func (gt *GuildsTree) createChannelNode(n *tview.TreeNode, c discord.Channel) *t
}
}
cn := tview.NewTreeNode(gt.channelToString(c))
cn.SetReference(c.ID)
n.AddChild(cn)
return cn
channelNode := tview.NewTreeNode(gt.channelToString(c))
channelNode.SetReference(c.ID)
n.AddChild(channelNode)
return channelNode
}
func (gt *GuildsTree) createChannelNodes(n *tview.TreeNode, cs []discord.Channel) {

View file

@ -36,16 +36,10 @@ func openState(token string) error {
discordState.AddHandler(discordState.onMessageCreate)
discordState.AddHandler(discordState.onMessageDelete)
discordState.StateLog = discordState.onLog
discordState.OnRequest = append(discordState.Client.OnRequest, discordState.onRequest)
return discordState.Open(context.TODO())
}
func (s *State) onLog(err error) {
log.Println(err.Error())
}
func (s *State) onRequest(r httpdriver.Request) error {
req, ok := r.(*httpdriver.DefaultRequest)
if ok {
@ -56,32 +50,34 @@ func (s *State) onRequest(r httpdriver.Request) error {
}
func (s *State) onReady(r *gateway.ReadyEvent) {
root := mainFlex.guildsTree.GetRoot()
dmNode := tview.NewTreeNode("Direct Messages")
mainFlex.guildsTree.root.AddChild(dmNode)
root.AddChild(dmNode)
folders := r.UserSettings.GuildFolders
if len(folders) == 0 {
for _, g := range r.Guilds {
mainFlex.guildsTree.createGuildNode(mainFlex.guildsTree.root, g.Guild)
mainFlex.guildsTree.createGuildNode(root, g.Guild)
}
} else {
for _, gf := range folders {
for _, folder := range folders {
// If the ID of the guild folder is zero, the guild folder only contains single guild.
if gf.ID == 0 {
g, err := s.Cabinet.Guild(gf.GuildIDs[0])
if folder.ID == 0 {
gID := folder.GuildIDs[0]
g, err := discordState.Cabinet.Guild(gID)
if err != nil {
log.Println(err)
log.Printf("guild %v not found in state: %v\n", gID, err)
continue
}
mainFlex.guildsTree.createGuildNode(mainFlex.guildsTree.root, *g)
mainFlex.guildsTree.createGuildNode(root, *g)
} else {
mainFlex.guildsTree.createGuildFolderNode(mainFlex.guildsTree.root, gf)
mainFlex.guildsTree.createFolderNode(folder)
}
}
}
mainFlex.guildsTree.SetCurrentNode(mainFlex.guildsTree.root)
mainFlex.guildsTree.SetCurrentNode(root)
app.SetFocus(mainFlex.guildsTree)
}