🎨 Repeated references to the same block within a block only count as one reference Fix https://github.com/siyuan-note/siyuan/issues/9670

This commit is contained in:
Daniel 2023-11-16 20:34:50 +08:00
parent cbc005119a
commit 6bb89ed2e5
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 23 additions and 4 deletions

View file

@ -73,8 +73,8 @@ func removeDuplicateDatabaseRefs() {
refreshRefsByDefID(rootID)
}
if 0 < len(duplicatedRootIDs) {
logging.LogWarnf("exist more than one ref duplicated [%d], reindex it", len(duplicatedRootIDs))
for _, rootID := range duplicatedRootIDs {
logging.LogWarnf("exist more than one ref duplicated [%s], reindex it", rootID)
}
}

View file

@ -354,7 +354,9 @@ func refsFromTree(tree *parse.Tree) (refs []*Ref, fileAnnotationRefs []*FileAnno
if treenode.IsBlockRef(n) {
ref := buildRef(tree, n)
refs = append(refs, ref)
if !isRepeatedRef(refs, ref) {
refs = append(refs, ref)
}
} else if treenode.IsFileAnnotationRef(n) {
pathID := n.TextMarkFileAnnotationRefID
idx := strings.LastIndex(pathID, "/")
@ -385,15 +387,32 @@ func refsFromTree(tree *parse.Tree) (refs []*Ref, fileAnnotationRefs []*FileAnno
fileAnnotationRefs = append(fileAnnotationRefs, ref)
} else if treenode.IsEmbedBlockRef(n) {
ref := buildEmbedRef(tree, n)
refs = append(refs, ref)
if !isRepeatedRef(refs, ref) {
refs = append(refs, ref)
}
}
return ast.WalkContinue
})
return
}
func isRepeatedRef(refs []*Ref, ref *Ref) bool {
// Repeated references to the same block within a block only count as one reference https://github.com/siyuan-note/siyuan/issues/9670
for _, r := range refs {
if r.DefBlockID == ref.DefBlockID && r.BlockID == ref.BlockID {
return true
}
}
return false
}
func buildRef(tree *parse.Tree, refNode *ast.Node) *Ref {
// 多个类型可能会导致渲染的 Markdown 不正确,所以这里只保留 block-ref 类型
tmpTyp := refNode.TextMarkType
refNode.TextMarkType = "block-ref"
markdown := treenode.ExportNodeStdMd(refNode, luteEngine)
refNode.TextMarkType = tmpTyp
defBlockID, text, _ := treenode.GetBlockRef(refNode)
var defBlockParentID, defBlockRootID, defBlockPath string
defBlock := treenode.GetBlockTree(defBlockID)