🎨 Automatically refresh reference counts after deleting or rolling back a document https://github.com/siyuan-note/siyuan/issues/12682

This commit is contained in:
Daniel 2024-10-03 17:40:33 +08:00
parent 169e6a5bd5
commit 82b89af76c
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 30 additions and 4 deletions

View file

@ -1742,13 +1742,26 @@ func removeDoc(box *Box, p string, luteEngine *lute.Lute) {
util.PushEvent(evt)
refreshParentDocInfo(tree)
task.AppendTask(task.DatabaseIndex, removeDoc0, box, p, childrenDir)
task.AppendTask(task.DatabaseIndex, removeDoc0, tree, childrenDir)
}
func removeDoc0(box *Box, p, childrenDir string) {
func removeDoc0(tree *parse.Tree, childrenDir string) {
// 收集引用的定义块 ID
refDefIDs := getRefDefIDs(tree.Root)
// 推送定义节点引用计数
for _, defID := range refDefIDs {
defTree, _ := LoadTreeByBlockID(defID)
if nil != defTree {
defNode := treenode.GetNodeInTree(defTree, defID)
if nil != defNode {
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, defTree.ID, defNode.ID)
}
}
}
treenode.RemoveBlockTreesByPathPrefix(childrenDir)
sql.RemoveTreePathQueue(box.ID, childrenDir)
cache.RemoveDocIAL(p)
sql.RemoveTreePathQueue(tree.Box, childrenDir)
cache.RemoveDocIAL(tree.Path)
return
}

View file

@ -315,6 +315,19 @@ func RollbackDocHistory(boxID, historyPath string) (err error) {
"refText": refText,
}
util.PushEvent(evt)
// 收集引用的定义块 ID
refDefIDs := getRefDefIDs(tree.Root)
// 推送定义节点引用计数
for _, defID := range refDefIDs {
defTree, _ := LoadTreeByBlockID(defID)
if nil != defTree {
defNode := treenode.GetNodeInTree(defTree, defID)
if nil != defNode {
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, defTree.ID, defNode.ID)
}
}
}
}()
return nil
}