MCPcopy Create free account
hub / github.com/devnullvoid/pvetui / SetNodes

Method SetNodes

internal/ui/components/storage_browser.go:125–182  ·  view source on GitHub ↗
(nodes []*api.Node)

Source from the content-addressed store, hash-verified

123}
124
125func (sb *StorageBrowser) SetNodes(nodes []*api.Node) {
126 sb.nodes = cloneAndSortStorageNodes(nodes)
127 selectedKey := selectionKey(sb.selection.Node, sb.selection.Storage)
128
129 root := tview.NewTreeNode("root").SetSelectable(false)
130 for _, node := range sb.nodes {
131 nodeData := &storageSelection{Node: node}
132 nodeLabel := node.Name
133 if node.SourceProfile != "" {
134 nodeLabel += fmt.Sprintf(" [secondary](%s)[-]", node.SourceProfile)
135 }
136
137 nodeNode := tview.NewTreeNode(theme.ReplaceSemanticTags(nodeLabel)).
138 SetReference(nodeData).
139 SetSelectable(true)
140 nodeNode.SetExpanded(true)
141
142 storages := make([]*api.Storage, 0, len(node.Storage))
143 storages = append(storages, node.Storage...)
144 sort.Slice(storages, func(i, j int) bool {
145 return storages[i].Name < storages[j].Name
146 })
147
148 for _, storage := range storages {
149 if storage == nil {
150 continue
151 }
152
153 label := storage.Name
154 if storage.IsShared() {
155 label += " [warning](shared)[-]"
156 }
157 if strings.TrimSpace(storage.Status) != "" && !strings.EqualFold(storage.Status, "active") {
158 label += fmt.Sprintf(" [secondary](%s)[-]", storage.Status)
159 }
160
161 storageNode := tview.NewTreeNode(theme.ReplaceSemanticTags(label)).
162 SetReference(&storageSelection{Node: node, Storage: storage}).
163 SetSelectable(true)
164 nodeNode.AddChild(storageNode)
165 }
166
167 root.AddChild(nodeNode)
168 }
169
170 sb.tree.SetRoot(root)
171 sb.tree.SetCurrentNode(sb.restoreSelection(root, selectedKey))
172 sb.tree.SetChangedFunc(func(node *tview.TreeNode) {
173 sb.handleTreeSelection(node)
174 })
175
176 if current := sb.tree.GetCurrentNode(); current != nil {
177 sb.handleTreeSelection(current)
178 } else {
179 sb.showNodeSummary(nil)
180 sb.showContentMessage("Select a storage")
181 }
182}

Callers

nothing calls this directly

Calls 8

restoreSelectionMethod · 0.95
handleTreeSelectionMethod · 0.95
showNodeSummaryMethod · 0.95
showContentMessageMethod · 0.95
ReplaceSemanticTagsFunction · 0.92
cloneAndSortStorageNodesFunction · 0.85
selectionKeyFunction · 0.85
IsSharedMethod · 0.80

Tested by

no test coverage detected