(node *tview.TreeNode, pa []string, val kv.Values)
| 444 | } |
| 445 | |
| 446 | func (m *model) populateTreeNode(node *tview.TreeNode, pa []string, val kv.Values) { |
| 447 | defer func() { |
| 448 | recover() |
| 449 | }() |
| 450 | var childrenKeys []string |
| 451 | children := make(map[string]*tview.TreeNode) |
| 452 | |
| 453 | var mi map[string]interface{} |
| 454 | var sl []interface{} |
| 455 | if er := val.Scan(&sl); er == nil { |
| 456 | for k, i := range sl { |
| 457 | c := tview.NewTreeNode(strconv.Itoa(k)) |
| 458 | var ref interface{} |
| 459 | if conf, o := i.(kv.Values); o { |
| 460 | ref = conf.Interface() |
| 461 | } else { |
| 462 | ref = i |
| 463 | } |
| 464 | c.SetExpanded(false).SetSelectable(true).SetReference(ref) |
| 465 | children[c.GetText()] = c |
| 466 | childrenKeys = append(childrenKeys, c.GetText()) |
| 467 | m.populateTreeNode(c, append(pa, strconv.Itoa(k)), configx.New(kv.WithInitData(i))) |
| 468 | } |
| 469 | } else if e := val.Scan(&mi); e == nil { |
| 470 | for k := range mi { |
| 471 | c := tview.NewTreeNode(k).SetReference(val.Val(k).Interface()) |
| 472 | children[c.GetText()] = c |
| 473 | childrenKeys = append(childrenKeys, c.GetText()) |
| 474 | c.SetExpanded(false) |
| 475 | c.SetSelectable(true) |
| 476 | m.populateTreeNode(c, append(pa, k), val.Val(k)) |
| 477 | } |
| 478 | } else { |
| 479 | node.SetText(node.GetText() + ": " + val.String()).SetReference(val.Interface()) |
| 480 | } |
| 481 | // Append children sorted |
| 482 | sort.Strings(childrenKeys) |
| 483 | for _, k := range childrenKeys { |
| 484 | node.AddChild(children[k]) |
| 485 | } |
| 486 | } |
| 487 | |
| 488 | func (m *model) sendCommand(ctx context.Context, cmdName, itemName string) { |
| 489 | if m.br == nil { |
no test coverage detected