Răsfoiți Sursa

Merge worktree-agent-a6803dde into master

claude 1 lună în urmă
părinte
comite
1c99b74a9e
1 a modificat fișierele cu 16 adăugiri și 2 ștergeri
  1. 16 2
      internal/ui/chat/guilds_tree.go

+ 16 - 2
internal/ui/chat/guilds_tree.go

@@ -32,6 +32,9 @@ type guildsTree struct {
 	dmRootNode      *tview.TreeNode
 
 	guildState *guildState
+
+	cachedCollapseNode   *tview.TreeNode
+	cachedCollapseResult bool
 }
 
 var _ help.KeyMap = (*guildsTree)(nil)
@@ -93,7 +96,7 @@ func (gt *guildsTree) ShortHelp() []keybind.Keybind {
 	collapseParent.SetHelp(collapseHelp.Key, "collapse parent")
 
 	shortHelp := []keybind.Keybind{cfg.Up.Keybind, cfg.Down.Keybind, selectCurrent}
-	if gt.canCollapseParent(gt.GetCurrentNode()) {
+	if gt.canCollapseParentCached() {
 		shortHelp = append(shortHelp, collapseParent)
 	}
 	return shortHelp
@@ -109,7 +112,7 @@ func (gt *guildsTree) FullHelp() [][]keybind.Keybind {
 	collapseParent.SetHelp(collapseHelp.Key, "collapse parent")
 
 	actions := []keybind.Keybind{selectCurrent, cfg.MoveToParentNode.Keybind}
-	if gt.canCollapseParent(gt.GetCurrentNode()) {
+	if gt.canCollapseParentCached() {
 		actions = append(actions, collapseParent)
 	}
 
@@ -133,11 +136,22 @@ func (gt *guildsTree) canCollapseParent(node *tview.TreeNode) bool {
 	return parent != nil && parent.GetLevel() != 0
 }
 
+func (gt *guildsTree) canCollapseParentCached() bool {
+	node := gt.GetCurrentNode()
+	if node == gt.cachedCollapseNode {
+		return gt.cachedCollapseResult
+	}
+	gt.cachedCollapseNode = node
+	gt.cachedCollapseResult = gt.canCollapseParent(node)
+	return gt.cachedCollapseResult
+}
+
 func (gt *guildsTree) resetNodeIndex() {
 	// Keep allocated map capacity; READY can rebuild often during reconnects.
 	clear(gt.guildNodeByID)
 	clear(gt.channelNodeByID)
 	gt.dmRootNode = nil
+	gt.cachedCollapseNode = nil
 }
 
 func (gt *guildsTree) createFolderNode(folder gateway.GuildFolder, guildsByID map[discord.GuildID]*gateway.GuildCreateEvent) {