From 097b96f8416a29c9102a7ab32ed43d13a17b4de6 Mon Sep 17 00:00:00 2001 From: rigormorrtiss Date: Thu, 19 Aug 2021 17:08:23 +0400 Subject: [PATCH] refactor: modularize into multiple functions to reduce complexity --- discordo.go | 17 ++--------------- ui/treeviews.go | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/discordo.go b/discordo.go index 14532fb..3087f71 100644 --- a/discordo.go +++ b/discordo.go @@ -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) } diff --git a/ui/treeviews.go b/ui/treeviews.go index 5ea17e3..4ddc9c6 100644 --- a/ui/treeviews.go +++ b/ui/treeviews.go @@ -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) + } + } + } +}