diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index 45ecb70a1..6f614596e 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -33,7 +33,6 @@ import ( "github.com/siyuan-note/logging" "github.com/siyuan-note/riff" "github.com/siyuan-note/siyuan/kernel/cache" - "github.com/siyuan-note/siyuan/kernel/filesys" "github.com/siyuan-note/siyuan/kernel/sql" "github.com/siyuan-note/siyuan/kernel/treenode" "github.com/siyuan-note/siyuan/kernel/util" @@ -367,32 +366,9 @@ func getTreeSubTreeChildBlocks(rootID string) (treeBlockIDs []string) { return } - trees := []*parse.Tree{tree} - box := Conf.Box(tree.Box) - luteEngine := util.NewLute() - files := box.ListFiles(tree.Path) - for _, subFile := range files { - if !strings.HasSuffix(subFile.path, ".sy") { - continue - } - - subTree, loadErr := filesys.LoadTree(box.ID, subFile.path, luteEngine) - if nil != loadErr { - continue - } - - trees = append(trees, subTree) - } - - for _, t := range trees { - ast.Walk(t.Root, func(n *ast.Node, entering bool) ast.WalkStatus { - if !entering || !n.IsBlock() { - return ast.WalkContinue - } - - treeBlockIDs = append(treeBlockIDs, n.ID) - return ast.WalkContinue - }) + bts := treenode.GetBlockTreesByPathPrefix(strings.TrimSuffix(tree.Path, ".sy")) + for _, bt := range bts { + treeBlockIDs = append(treeBlockIDs, bt.ID) } return } diff --git a/kernel/treenode/blocktree.go b/kernel/treenode/blocktree.go index d29aa48e6..ff0a0bc0e 100644 --- a/kernel/treenode/blocktree.go +++ b/kernel/treenode/blocktree.go @@ -180,6 +180,21 @@ func RemoveBlockTreesByRootID(rootID string) { } } +func GetBlockTreesByPathPrefix(pathPrefix string) (ret []*BlockTree) { + blockTrees.Range(func(key, value interface{}) bool { + slice := value.(*btSlice) + slice.m.Lock() + for _, b := range slice.data { + if strings.HasPrefix(b.Path, pathPrefix) { + ret = append(ret, b) + } + } + slice.m.Unlock() + return true + }) + return +} + func RemoveBlockTreesByPathPrefix(pathPrefix string) { var ids []string blockTrees.Range(func(key, value interface{}) bool {