diff --git a/kernel/model/block.go b/kernel/model/block.go index b9b51f668..c48e11dcb 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -155,6 +155,9 @@ func SwapBlockRef(refID, defID string, includeChildren bool) (err error) { } } + refreshUpdated(defNode) + refreshUpdated(refNode) + refPivot := treenode.NewParagraph() refNode.InsertBefore(refPivot) @@ -215,13 +218,11 @@ func SwapBlockRef(refID, defID string, includeChildren bool) (err error) { } refPivot.Unlink() - treenode.IndexBlockTree(refTree) - if err = writeJSONQueue(refTree); nil != err { + if err = indexWriteJSONQueue(refTree); nil != err { return } if !sameTree { - treenode.IndexBlockTree(defTree) - if err = writeJSONQueue(defTree); nil != err { + if err = indexWriteJSONQueue(defTree); nil != err { return } } diff --git a/kernel/model/blockinfo.go b/kernel/model/blockinfo.go index ea5b9bcee..11aa9627e 100644 --- a/kernel/model/blockinfo.go +++ b/kernel/model/blockinfo.go @@ -94,8 +94,10 @@ func GetBlockRefText(id string) string { } func getNodeRefText(node *ast.Node) string { - if name := node.IALAttr("name"); "" != name { - return name + if ret := node.IALAttr("name"); "" != ret { + ret = strings.TrimSpace(ret) + ret = util.EscapeHTML(ret) + return ret } switch node.Type { diff --git a/kernel/treenode/blocktree.go b/kernel/treenode/blocktree.go index bb5e2f1c9..fdfeaf112 100644 --- a/kernel/treenode/blocktree.go +++ b/kernel/treenode/blocktree.go @@ -270,7 +270,7 @@ func IndexBlockTree(tree *parse.Tree) { slice.m.Unlock() if nil != bt { - if bt.Updated != n.IALAttr("updated") { + if bt.Updated != n.IALAttr("updated") || bt.Path != tree.Path || bt.BoxID != tree.Box || bt.HPath != tree.HPath { children := ChildBlockNodes(n) // 需要考虑子块,因为一些操作(比如移动块)后需要同时更新子块 changedNodes = append(changedNodes, children...) } @@ -305,9 +305,13 @@ func updateBtSlice(n *ast.Node, tree *parse.Tree) { slice.m.Unlock() } -func InitBlockTree(force bool) { - start := time.Now() +var blockTreeLock = sync.Mutex{} +func InitBlockTree(force bool) { + blockTreeLock.Lock() + defer blockTreeLock.Unlock() + + start := time.Now() if force { err := os.RemoveAll(util.BlockTreePath) if nil != err { @@ -387,6 +391,9 @@ func SaveBlockTreeJob() { } func SaveBlockTree(force bool) { + blockTreeLock.Lock() + defer blockTreeLock.Unlock() + start := time.Now() os.MkdirAll(util.BlockTreePath, 0755)