浏览代码

refactor: modularize into multiple functions to reduce complexity

rigormorrtiss 4 年之前
父节点
当前提交
097b96f841
共有 2 个文件被更改,包括 25 次插入15 次删除
  1. 2 15
      discordo.go
  2. 23 0
      ui/treeviews.go

+ 2 - 15
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)
 }

+ 23 - 0
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)
+			}
+		}
+	}
+}