refreshNodeData refreshes data for a specific node and updates the UI.
(node *api.Node)
| 588 | |
| 589 | // refreshNodeData refreshes data for a specific node and updates the UI. |
| 590 | func (a *App) refreshNodeData(node *api.Node) { |
| 591 | a.header.ShowLoading(fmt.Sprintf("Refreshing node %s", node.Name)) |
| 592 | // Record the currently selected node's name |
| 593 | selectedNodeName := "" |
| 594 | if selected := a.nodeList.GetSelectedNode(); selected != nil { |
| 595 | selectedNodeName = selected.Name |
| 596 | } |
| 597 | |
| 598 | go func() { |
| 599 | var freshNode *api.Node |
| 600 | var err error |
| 601 | |
| 602 | client, clientErr := a.getClientForNode(node) |
| 603 | if clientErr != nil { |
| 604 | err = clientErr |
| 605 | } else { |
| 606 | freshNode, err = client.RefreshNodeData(node.Name) |
| 607 | } |
| 608 | |
| 609 | a.QueueUpdateDraw(func() { |
| 610 | if err != nil { |
| 611 | a.header.ShowError(fmt.Sprintf("Error refreshing node %s: %v", node.Name, err)) |
| 612 | |
| 613 | return |
| 614 | } |
| 615 | // Update node in global state |
| 616 | for i, n := range models.GlobalState.OriginalNodes { |
| 617 | if n != nil && n.Name == node.Name { |
| 618 | // In group mode, ensure SourceProfile is preserved/set |
| 619 | if a.isGroupMode { |
| 620 | freshNode.SourceProfile = node.SourceProfile |
| 621 | } |
| 622 | models.GlobalState.OriginalNodes[i] = freshNode |
| 623 | break |
| 624 | } |
| 625 | } |
| 626 | |
| 627 | for i, n := range models.GlobalState.FilteredNodes { |
| 628 | if n != nil && n.Name == node.Name { |
| 629 | // In group mode, ensure SourceProfile is preserved/set |
| 630 | if a.isGroupMode { |
| 631 | freshNode.SourceProfile = node.SourceProfile |
| 632 | } |
| 633 | models.GlobalState.FilteredNodes[i] = freshNode |
| 634 | break |
| 635 | } |
| 636 | } |
| 637 | |
| 638 | a.nodeList.SetNodes(models.GlobalState.FilteredNodes) |
| 639 | a.syncStorageBrowserNodes() |
| 640 | a.nodeDetails.Update(freshNode, models.GlobalState.OriginalNodes) |
| 641 | // Restore selection by previously selected node name using the tview list data |
| 642 | restored := false |
| 643 | |
| 644 | nodeList := a.nodeList.GetNodes() |
| 645 | for i, n := range nodeList { |
| 646 | if n != nil && n.Name == selectedNodeName { |
| 647 | a.nodeList.SetCurrentItem(i) |
no test coverage detected