|
|
@@ -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) {
|