diff --git a/kernel/model/block.go b/kernel/model/block.go index 5ee473604..0fb8d40d2 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -391,6 +391,8 @@ func getBlock(id string) (ret *Block, err error) { return } + waitForIndexing() + tree, err := loadTreeByBlockID(id) if nil != err { return diff --git a/kernel/model/index.go b/kernel/model/index.go index d370dd3a9..d02c1a78c 100644 --- a/kernel/model/index.go +++ b/kernel/model/index.go @@ -49,12 +49,25 @@ func (box *Box) Index() { task.AppendTask(task.DatabaseIndexRef, IndexRefs) } +var indexing = false + +func waitForIndexing() { + for indexing { + time.Sleep(time.Millisecond * 100) + } +} + func index(boxID string) { box := Conf.Box(boxID) if nil == box { return } + indexing = true + defer func() { + indexing = false + }() + util.SetBootDetails("Listing files...") files := box.ListFiles("/") boxLen := len(Conf.GetOpenedBoxes()) @@ -68,9 +81,7 @@ func index(boxID string) { var treeCount int var treeSize int64 i := 0 - util.PushStatusBar(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files))) - for _, file := range files { if file.isdir || !strings.HasSuffix(file.name, ".sy") { continue diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 58a1de9f0..0b606d13e 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1306,6 +1306,12 @@ func autoFixIndex() { } } + // 清理已关闭的笔记本块树 + boxes = Conf.GetClosedBoxes() + for _, box := range boxes { + treenode.RemoveBlockTreesByBoxID(box.ID) + } + // 对比块树和数据库并订正数据库 rootUpdatedMap := treenode.GetRootUpdated() dbRootUpdatedMap, err := sql.GetRootUpdated("blocks") diff --git a/kernel/treenode/blocktree.go b/kernel/treenode/blocktree.go index b56c286a9..55f1eac0f 100644 --- a/kernel/treenode/blocktree.go +++ b/kernel/treenode/blocktree.go @@ -292,17 +292,6 @@ func ReindexBlockTree(tree *parse.Tree) { blockTreesLock.Lock() defer blockTreesLock.Unlock() - //var ids []string - //for _, b := range blockTrees { - // if b.RootID == tree.ID { - // ids = append(ids, b.ID) - // } - //} - //ids = gulu.Str.RemoveDuplicatedElem(ids) - //for _, id := range ids { - // delete(blockTrees, id) - //} - ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus { if !entering || !n.IsBlock() { return ast.WalkContinue