refactor: modularize into multiple functions to reduce complexity

This commit is contained in:
rigormorrtiss 2021-08-19 17:08:23 +04:00
parent 7eac041b80
commit 097b96f841
2 changed files with 25 additions and 15 deletions

View file

@ -175,13 +175,7 @@ func onGuildsTreeViewSelected(gn *tview.TreeNode) {
rootN := channelsTreeView.GetRoot()
rootN.ClearChildren()
// Top-level channels
for _, c := range cs {
if (c.Type == discord.GuildText || c.Type == discord.GuildNews) && (c.ParentID == 0 || c.ParentID == discord.NullChannelID) {
cn := ui.NewTextChannelTreeNode(c)
rootN.AddChild(cn)
continue
}
}
ui.CreateTopLevelTreeNodes(rootN, cs)
// Category channels
CategoryLoop:
for _, c := range cs {
@ -201,14 +195,7 @@ CategoryLoop:
}
}
// Second-level channels
for _, c := range cs {
if (c.Type == discord.GuildText || c.Type == discord.GuildNews) && (c.ParentID != 0 && c.ParentID != discord.NullChannelID) {
if pn := ui.GetTreeNodeByReference(c.ParentID, channelsTreeView); pn != nil {
cn := ui.NewTextChannelTreeNode(c)
pn.AddChild(cn)
}
}
}
ui.CreateSecondLevelTreeNodes(channelsTreeView, rootN, cs)
channelsTreeView.SetCurrentNode(rootN)
}

View file

@ -58,3 +58,26 @@ func GetTreeNodeByReference(r interface{}, treeV *tview.TreeView) (mn *tview.Tre
return
}
// CreateTopLevelTreeNodes creates treenodes for the top-level (orphan) channels.
func CreateTopLevelTreeNodes(rootN *tview.TreeNode, cs []discord.Channel) {
for _, c := range cs {
if (c.Type == discord.GuildText || c.Type == discord.GuildNews) && (c.ParentID == 0 || c.ParentID == discord.NullChannelID) {
cn := NewTextChannelTreeNode(c)
rootN.AddChild(cn)
continue
}
}
}
// CreateSecondLevelTreeNodes creates treenodes for the second-level (category children) channels.
func CreateSecondLevelTreeNodes(channelsTreeView *tview.TreeView, rootN *tview.TreeNode, cs []discord.Channel) {
for _, c := range cs {
if (c.Type == discord.GuildText || c.Type == discord.GuildNews) && (c.ParentID != 0 && c.ParentID != discord.NullChannelID) {
if pn := GetTreeNodeByReference(c.ParentID, channelsTreeView); pn != nil {
cn := NewTextChannelTreeNode(c)
pn.AddChild(cn)
}
}
}
}