浏览代码

:art: OCR no longer blocks document loading https://github.com/siyuan-note/siyuan/issues/9230

Daniel 1 年之前
父节点
当前提交
aaf15c77e0
共有 4 个文件被更改,包括 25 次插入7 次删除
  1. 2 4
      kernel/model/conf.go
  2. 9 0
      kernel/model/ocr.go
  3. 3 3
      kernel/sql/database.go
  4. 11 0
      kernel/util/tesseract.go

+ 2 - 4
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")

+ 9 - 0
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() {

+ 3 - 3
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)

+ 11 - 0
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)
+}