mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-18 15:40:12 +01:00
🎨 Improve reference count update after moving heading blocks https://github.com/siyuan-note/siyuan/issues/15322
This commit is contained in:
parent
d5d6095070
commit
38a7bf03bc
2 changed files with 22 additions and 10 deletions
|
|
@ -207,8 +207,9 @@ func refreshDynamicRefTexts0(updatedDefNodes map[string]*ast.Node, updatedTrees
|
||||||
// 1. 更新引用的动态锚文本
|
// 1. 更新引用的动态锚文本
|
||||||
treeRefNodeIDs := map[string]*hashset.Set{}
|
treeRefNodeIDs := map[string]*hashset.Set{}
|
||||||
var changedNodes []*ast.Node
|
var changedNodes []*ast.Node
|
||||||
|
var refs []*sql.Ref
|
||||||
for _, updateNode := range updatedDefNodes {
|
for _, updateNode := range updatedDefNodes {
|
||||||
refs, parentNodes, childNodes := getRefsCacheByDefNode(updateNode)
|
refs, changedNodes = getRefsCacheByDefNode(updateNode)
|
||||||
for _, ref := range refs {
|
for _, ref := range refs {
|
||||||
if refIDs, ok := treeRefNodeIDs[ref.RootID]; !ok {
|
if refIDs, ok := treeRefNodeIDs[ref.RootID]; !ok {
|
||||||
refIDs = hashset.New()
|
refIDs = hashset.New()
|
||||||
|
|
@ -218,12 +219,6 @@ func refreshDynamicRefTexts0(updatedDefNodes map[string]*ast.Node, updatedTrees
|
||||||
refIDs.Add(ref.BlockID)
|
refIDs.Add(ref.BlockID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if 0 < len(parentNodes) {
|
|
||||||
changedNodes = append(changedNodes, parentNodes...)
|
|
||||||
}
|
|
||||||
if 0 < len(childNodes) {
|
|
||||||
changedNodes = append(changedNodes, childNodes...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for _, n := range changedNodes {
|
for _, n := range changedNodes {
|
||||||
updatedDefNodes[n.ID] = n
|
updatedDefNodes[n.ID] = n
|
||||||
|
|
|
||||||
|
|
@ -1594,7 +1594,8 @@ func (tx *Transaction) writeTree(tree *parse.Tree) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentNodes, changedChildNodes []*ast.Node) {
|
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedNodes []*ast.Node) {
|
||||||
|
changedNodesMap := map[string]*ast.Node{}
|
||||||
ret = sql.GetRefsCacheByDefID(updateNode.ID)
|
ret = sql.GetRefsCacheByDefID(updateNode.ID)
|
||||||
if nil != updateNode.Parent && ast.NodeDocument != updateNode.Parent.Type &&
|
if nil != updateNode.Parent && ast.NodeDocument != updateNode.Parent.Type &&
|
||||||
updateNode.Parent.IsContainerBlock() && updateNode == treenode.FirstLeafBlock(updateNode.Parent) {
|
updateNode.Parent.IsContainerBlock() && updateNode == treenode.FirstLeafBlock(updateNode.Parent) {
|
||||||
|
|
@ -1607,7 +1608,9 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
|
||||||
parentRefs := sql.GetRefsCacheByDefID(parent.ID)
|
parentRefs := sql.GetRefsCacheByDefID(parent.ID)
|
||||||
if 0 < len(parentRefs) {
|
if 0 < len(parentRefs) {
|
||||||
ret = append(ret, parentRefs...)
|
ret = append(ret, parentRefs...)
|
||||||
changedParentNodes = append(changedParentNodes, parent)
|
if _, ok := changedNodesMap[parent.ID]; !ok {
|
||||||
|
changedNodesMap[parent.ID] = parent
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1621,11 +1624,25 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
|
||||||
childRefs := sql.GetRefsCacheByDefID(n.ID)
|
childRefs := sql.GetRefsCacheByDefID(n.ID)
|
||||||
if 0 < len(childRefs) {
|
if 0 < len(childRefs) {
|
||||||
ret = append(ret, childRefs...)
|
ret = append(ret, childRefs...)
|
||||||
changedChildNodes = append(changedChildNodes, n)
|
changedNodesMap[n.ID] = n
|
||||||
}
|
}
|
||||||
return ast.WalkContinue
|
return ast.WalkContinue
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if ast.NodeHeading == updateNode.Type && "1" == updateNode.IALAttr("fold") {
|
||||||
|
// 如果是折叠标题,则需要向下查找引用
|
||||||
|
children := treenode.HeadingChildren(updateNode)
|
||||||
|
for _, child := range children {
|
||||||
|
childRefs := sql.GetRefsCacheByDefID(child.ID)
|
||||||
|
if 0 < len(childRefs) {
|
||||||
|
ret = append(ret, childRefs...)
|
||||||
|
changedNodesMap[child.ID] = child
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, n := range changedNodesMap {
|
||||||
|
changedNodes = append(changedNodes, n)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue