diff --git a/kernel/model/box.go b/kernel/model/box.go index 56f7f3d4e..1d8df876b 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -486,7 +486,7 @@ func FullReindex() { } func fullReindex() { - util.PushEndlessProgress(Conf.Language(35)) + util.PushMsg(Conf.Language(35), 60*1000*10) WaitForWritingFiles() if err := sql.InitDatabase(true); nil != err { @@ -505,7 +505,7 @@ func fullReindex() { treenode.SaveBlockTree(true) LoadFlashcards() - util.PushEndlessProgress(Conf.Language(58)) + util.PushMsg(Conf.Language(58), 7000) go func() { time.Sleep(1 * time.Second) util.ReloadUI() diff --git a/kernel/model/conf.go b/kernel/model/conf.go index f1631195c..519a1263c 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -393,6 +393,7 @@ var exitLock = sync.Mutex{} func Close(force bool, execInstallPkg int) (exitCode int) { exitLock.Lock() defer exitLock.Unlock() + util.IsExiting = true logging.LogInfof("exiting kernel [force=%v, execInstallPkg=%d]", force, execInstallPkg) util.PushMsg(Conf.Language(95), 10000*60) diff --git a/kernel/model/index.go b/kernel/model/index.go index f5b7ab140..d370dd3a9 100644 --- a/kernel/model/index.go +++ b/kernel/model/index.go @@ -69,8 +69,7 @@ func index(boxID string) { var treeSize int64 i := 0 - util.PushEndlessProgress(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files))) - defer util.PushClearProgress() + util.PushStatusBar(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files))) for _, file := range files { if file.isdir || !strings.HasSuffix(file.name, ".sy") { @@ -101,7 +100,7 @@ func index(boxID string) { treeSize += file.size treeCount++ if 1 < i && 0 == i%64 { - util.PushEndlessProgress(fmt.Sprintf(Conf.Language(88), i, len(files)-i)) + util.PushStatusBar(fmt.Sprintf(Conf.Language(88), i, len(files)-i)) } i++ } diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index b048633ca..4c9112cea 100644 --- a/kernel/sql/queue.go +++ b/kernel/sql/queue.go @@ -104,6 +104,10 @@ func FlushQueue() { context := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar} for _, op := range ops { + if util.IsExiting { + break + } + switch op.action { case "upsert": tree := op.upsertTree diff --git a/kernel/task/queue.go b/kernel/task/queue.go index 9609408a1..cab4f41db 100644 --- a/kernel/task/queue.go +++ b/kernel/task/queue.go @@ -17,6 +17,7 @@ package task import ( + "github.com/siyuan-note/siyuan/kernel/util" "reflect" "sync" "time" @@ -122,6 +123,10 @@ func Loop() { continue } + if util.IsExiting { + break + } + execTask(task) } } diff --git a/kernel/treenode/blocktree.go b/kernel/treenode/blocktree.go index 67df96687..b56c286a9 100644 --- a/kernel/treenode/blocktree.go +++ b/kernel/treenode/blocktree.go @@ -292,16 +292,16 @@ 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) - } + //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() { diff --git a/kernel/util/runtime.go b/kernel/util/runtime.go index 6d230bc9d..0b2ae553a 100644 --- a/kernel/util/runtime.go +++ b/kernel/util/runtime.go @@ -42,6 +42,9 @@ const ( ExitCodeFatal = 1 // 致命错误 ) +// IsExiting 是否正在退出程序。 +var IsExiting = false + func logBootInfo() { logging.LogInfof("kernel is booting:\n"+ " * ver [%s]\n"+