From 7028759499b93398f1466bc330830cb1d70afda7 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 9 Oct 2024 16:38:43 +0800 Subject: [PATCH] :bug: Add a kernel API `/api/block/getDocsInfo` https://github.com/siyuan-note/siyuan/pull/12723 https://github.com/siyuan-note/siyuan/issues/12740 --- kernel/filesys/tree.go | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/kernel/filesys/tree.go b/kernel/filesys/tree.go index 77ba47d74..654521b76 100644 --- a/kernel/filesys/tree.go +++ b/kernel/filesys/tree.go @@ -43,18 +43,19 @@ func LoadTrees(ids []string) (ret map[string]*parse.Tree) { luteEngine := util.NewLute() var boxIDs []string var paths []string - seen := make(map[string]bool) + blockIDs := map[string]string{} + seen := map[string]bool{} for _, bt := range bts { key := bt.BoxID + bt.Path if !seen[key] { seen[key] = true boxIDs = append(boxIDs, bt.BoxID) paths = append(paths, bt.Path) + blockIDs[bt.RootID] = bt.ID } } - trees, errs := BatchLoadTrees(boxIDs, paths, luteEngine) - + trees, errs := batchLoadTrees(boxIDs, paths, luteEngine) for i := range trees { tree := trees[i] err := errs[i] @@ -63,7 +64,8 @@ func LoadTrees(ids []string) (ret map[string]*parse.Tree) { continue } - ret[tree.ID] = tree + id := blockIDs[tree.Root.ID] + ret[id] = tree } return } @@ -80,11 +82,9 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro return } -func BatchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) ([]*parse.Tree, []error) { - results := make([]*parse.Tree, len(paths)) - errs := make([]error, len(paths)) - +func batchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) (ret []*parse.Tree, errs []error) { var wg sync.WaitGroup + lock := sync.Mutex{} for i := range paths { wg.Add(1) go func(i int) { @@ -93,13 +93,14 @@ func BatchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) ([]*parse.Tre boxID := boxIDs[i] path := paths[i] tree, err := LoadTree(boxID, path, luteEngine) - results[i] = tree - errs[i] = err + lock.Lock() + ret = append(ret, tree) + errs = append(errs, err) + lock.Unlock() }(i) } wg.Wait() - - return results, errs + return } func LoadTreeByData(data []byte, boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err error) {