|
|
@@ -2,6 +2,7 @@ package ui
|
|
|
|
|
|
import (
|
|
|
"github.com/rigormorrtiss/discordgo"
|
|
|
+ "github.com/rigormorrtiss/discordo/util"
|
|
|
"github.com/rivo/tview"
|
|
|
)
|
|
|
|
|
|
@@ -58,9 +59,13 @@ func GetTreeNodeByReference(r interface{}, treeV *tview.TreeView) (mn *tview.Tre
|
|
|
}
|
|
|
|
|
|
// CreateTopLevelTreeNodes creates treenodes for the top-level (orphan) channels.
|
|
|
-func CreateTopLevelTreeNodes(rootN *tview.TreeNode, cs []*discordgo.Channel) {
|
|
|
+func CreateTopLevelChannelsTreeNodes(s *discordgo.State, rootN *tview.TreeNode, cs []*discordgo.Channel) {
|
|
|
for _, c := range cs {
|
|
|
if (c.Type == discordgo.ChannelTypeGuildText || c.Type == discordgo.ChannelTypeGuildNews) && (c.ParentID == "") {
|
|
|
+ if !util.HasPermission(s, s.User.ID, c.ID, discordgo.PermissionViewChannel) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
cn := NewTextChannelTreeNode(c)
|
|
|
rootN.AddChild(cn)
|
|
|
continue
|
|
|
@@ -68,10 +73,38 @@ func CreateTopLevelTreeNodes(rootN *tview.TreeNode, cs []*discordgo.Channel) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// CreateSecondLevelTreeNodes creates treenodes for the second-level (category children) channels.
|
|
|
-func CreateSecondLevelTreeNodes(channelsTreeView *tview.TreeView, rootN *tview.TreeNode, cs []*discordgo.Channel) {
|
|
|
+func CreateCategoryChannelsTreeNodes(s *discordgo.State, rootN *tview.TreeNode, cs []*discordgo.Channel) {
|
|
|
+CategoryLoop:
|
|
|
+ for _, c := range cs {
|
|
|
+ if c.Type == discordgo.ChannelTypeGuildCategory {
|
|
|
+ if !util.HasPermission(s, s.User.ID, c.ID, discordgo.PermissionViewChannel) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, child := range cs {
|
|
|
+ if child.ParentID == c.ID {
|
|
|
+ cn := tview.NewTreeNode(c.Name).
|
|
|
+ SetReference(c.ID)
|
|
|
+ rootN.AddChild(cn)
|
|
|
+ continue CategoryLoop
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ cn := tview.NewTreeNode(c.Name).
|
|
|
+ SetReference(c.ID)
|
|
|
+ rootN.AddChild(cn)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// CreateSecondLevelChannelsTreeNodes creates treenodes for the second-level (category children) channels.
|
|
|
+func CreateSecondLevelChannelsTreeNodes(s *discordgo.State, channelsTreeView *tview.TreeView, rootN *tview.TreeNode, cs []*discordgo.Channel) {
|
|
|
for _, c := range cs {
|
|
|
if (c.Type == discordgo.ChannelTypeGuildText || c.Type == discordgo.ChannelTypeGuildNews) && (c.ParentID != "") {
|
|
|
+ if !util.HasPermission(s, s.User.ID, c.ID, discordgo.PermissionViewChannel) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
if pn := GetTreeNodeByReference(c.ParentID, channelsTreeView); pn != nil {
|
|
|
cn := NewTextChannelTreeNode(c)
|
|
|
pn.AddChild(cn)
|