🎨 After invoking kernel API setBlockAttrs
then auto refresh dynamic anchor text of block refs Fix https://github.com/siyuan-note/siyuan/issues/8605
This commit is contained in:
parent
ed6a4a5141
commit
0f519f62b1
2 changed files with 18 additions and 6 deletions
|
@ -29,6 +29,7 @@ import (
|
|||
"github.com/88250/lute/parse"
|
||||
"github.com/araddon/dateparse"
|
||||
"github.com/siyuan-note/siyuan/kernel/cache"
|
||||
"github.com/siyuan-note/siyuan/kernel/sql"
|
||||
"github.com/siyuan-note/siyuan/kernel/treenode"
|
||||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
)
|
||||
|
@ -135,6 +136,11 @@ func setNodeAttrs(node *ast.Node, tree *parse.Tree, nameValues map[string]string
|
|||
cache.PutBlockIAL(node.ID, parse.IAL2Map(node.KramdownIAL))
|
||||
|
||||
pushBroadcastAttrTransactions(oldAttrs, node)
|
||||
|
||||
go func() {
|
||||
sql.WaitForWritingDatabase()
|
||||
refreshDynamicRefText(node, tree)
|
||||
}()
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -1059,7 +1059,7 @@ func (tx *Transaction) commit() (err error) {
|
|||
return
|
||||
}
|
||||
}
|
||||
refreshDynamicRefText(tx.nodes, tx.trees)
|
||||
refreshDynamicRefTexts(tx.nodes, tx.trees)
|
||||
IncSync()
|
||||
tx.trees = nil
|
||||
return
|
||||
|
@ -1099,9 +1099,17 @@ func (tx *Transaction) writeTree(tree *parse.Tree) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func refreshDynamicRefText(updatedDefNodes map[string]*ast.Node, updatedTrees map[string]*parse.Tree) {
|
||||
// 这个实现依赖了数据库缓存,导致外部调用时可能需要阻塞等待数据库写入后才能获取到 refs
|
||||
// refreshDynamicRefText 用于刷新引用块的动态锚文本。
|
||||
// 该实现依赖了数据库缓存,导致外部调用时可能需要阻塞等待数据库写入后才能获取到 refs
|
||||
func refreshDynamicRefText(updatedDefNode *ast.Node, updatedTree *parse.Tree) {
|
||||
changedDefs := map[string]*ast.Node{updatedDefNode.ID: updatedDefNode}
|
||||
changedTrees := map[string]*parse.Tree{updatedTree.ID: updatedTree}
|
||||
refreshDynamicRefTexts(changedDefs, changedTrees)
|
||||
}
|
||||
|
||||
// refreshDynamicRefTexts 用于批量刷新引用块的动态锚文本。
|
||||
// 该实现依赖了数据库缓存,导致外部调用时可能需要阻塞等待数据库写入后才能获取到 refs
|
||||
func refreshDynamicRefTexts(updatedDefNodes map[string]*ast.Node, updatedTrees map[string]*parse.Tree) {
|
||||
treeRefNodeIDs := map[string]*hashset.Set{}
|
||||
for _, updateNode := range updatedDefNodes {
|
||||
refs := sql.GetRefsCacheByDefID(updateNode.ID)
|
||||
|
@ -1183,9 +1191,7 @@ func flushUpdateRefTextRenameDoc() {
|
|||
defer updateRefTextRenameDocLock.Unlock()
|
||||
|
||||
for _, tree := range updateRefTextRenameDocs {
|
||||
changedDefs := map[string]*ast.Node{tree.ID: tree.Root}
|
||||
changedTrees := map[string]*parse.Tree{tree.ID: tree}
|
||||
refreshDynamicRefText(changedDefs, changedTrees)
|
||||
refreshDynamicRefText(tree.Root, tree)
|
||||
}
|
||||
updateRefTextRenameDocs = map[string]*parse.Tree{}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue