diff --git a/kernel/model/conf.go b/kernel/model/conf.go index 551253a43..570626a76 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -586,15 +586,13 @@ func NewLute() (ret *lute.Lute) { return } -var confSaveLock = sync.Mutex{} - func (conf *AppConf) Save() { if util.ReadOnly { return } - confSaveLock.Lock() - defer confSaveLock.Unlock() + Conf.m.Lock() + defer Conf.m.Unlock() newData, _ := gulu.JSON.MarshalIndentJSON(Conf, "", " ") confPath := filepath.Join(util.ConfDir, "conf.json") diff --git a/kernel/model/ocr.go b/kernel/model/ocr.go index 75274a8d7..1d05ab2af 100644 --- a/kernel/model/ocr.go +++ b/kernel/model/ocr.go @@ -12,6 +12,7 @@ import ( "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/cache" + "github.com/siyuan-note/siyuan/kernel/sql" "github.com/siyuan-note/siyuan/kernel/task" "github.com/siyuan-note/siyuan/kernel/util" ) @@ -53,6 +54,14 @@ func autoOCRAssets() { } cleanNotExistAssetsTexts() + + // 刷新 OCR 结果到数据库 + util.NodeOCRQueueLock.Lock() + defer util.NodeOCRQueueLock.Unlock() + for _, id := range util.NodeOCRQueue { + sql.IndexNodeQueue(id) + } + util.NodeOCRQueue = nil } func cleanNotExistAssetsTexts() { diff --git a/kernel/sql/database.go b/kernel/sql/database.go index 995788bb1..935678d87 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -800,13 +800,13 @@ func buildBlockFromNode(n *ast.Node, tree *parse.Tree) (block *Block, attributes markdown = treenode.ExportNodeStdMd(n, luteEngine) if !treenode.IsNodeOCRed(n) { - IndexNodeQueue(n.ID) + util.PushNodeOCRQueue(n.ID) } content = treenode.NodeStaticContent(n, nil, true, indexAssetPath) fc := treenode.FirstLeafBlock(n) if !treenode.IsNodeOCRed(fc) { - IndexNodeQueue(fc.ID) + util.PushNodeOCRQueue(fc.ID) } fcontent = treenode.NodeStaticContent(fc, nil, true, false) @@ -820,7 +820,7 @@ func buildBlockFromNode(n *ast.Node, tree *parse.Tree) (block *Block, attributes markdown = treenode.ExportNodeStdMd(n, luteEngine) if !treenode.IsNodeOCRed(n) { - IndexNodeQueue(n.ID) + util.PushNodeOCRQueue(n.ID) } content = treenode.NodeStaticContent(n, nil, true, indexAssetPath) diff --git a/kernel/util/tesseract.go b/kernel/util/tesseract.go index ace365b4b..d9a5015c3 100644 --- a/kernel/util/tesseract.go +++ b/kernel/util/tesseract.go @@ -273,3 +273,14 @@ func getTesseractLangs() (ret []string) { } return } + +var ( + NodeOCRQueue []string + NodeOCRQueueLock = sync.Mutex{} +) + +func PushNodeOCRQueue(id string) { + NodeOCRQueueLock.Lock() + defer NodeOCRQueueLock.Unlock() + NodeOCRQueue = append(NodeOCRQueue, id) +}