diff --git a/app/src/menus/protyle.ts b/app/src/menus/protyle.ts index 1819e0bf5..1e59bb119 100644 --- a/app/src/menus/protyle.ts +++ b/app/src/menus/protyle.ts @@ -1017,8 +1017,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme bind(element) { element.style.maxWidth = "none"; fetchPost("/api/asset/getImageOCRText", { - path: imgElement.getAttribute("src"), - force: false + path: imgElement.getAttribute("src") }, (response) => { element.querySelector("textarea").value = response.data.text; }); @@ -1029,9 +1028,14 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme iconHTML: "", label: window.siyuan.languages.reOCR, click() { - fetchPost("/api/asset/getImageOCRText", { + fetchPost("/api/asset/ocr", { path: imgElement.getAttribute("src"), force: true + }, (response) => { + fetchPost("/api/asset/setImageOCRText", { + path: imgElement.getAttribute("src"), + text: response.data.text + }); }); } }], @@ -1115,13 +1119,6 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme const textElements = window.siyuan.menus.menu.element.querySelectorAll("textarea"); textElements[0].focus(); window.siyuan.menus.menu.removeCB = () => { - const ocrElemennt = window.siyuan.menus.menu.element.querySelector('[data-type="ocr"]') as HTMLTextAreaElement; - if (ocrElemennt) { - fetchPost("/api/asset/setImageOCRText", { - path: imgElement.getAttribute("src"), - text: ocrElemennt.value - }); - } imgElement.setAttribute("alt", textElements[2].value.replace(/\n|\r\n|\r|\u2028|\u2029/g, "")); nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss")); updateTransaction(protyle, id, nodeElement.outerHTML, html); diff --git a/kernel/api/asset.go b/kernel/api/asset.go index ba7ef3599..2b3ad7223 100644 --- a/kernel/api/asset.go +++ b/kernel/api/asset.go @@ -107,13 +107,9 @@ func getImageOCRText(c *gin.Context) { } path := arg["path"].(string) - force := false - if forceArg := arg["force"]; nil != forceArg { - force = forceArg.(bool) - } ret.Data = map[string]interface{}{ - "text": util.GetAssetText(path, force), + "text": util.GetAssetText(path), } } @@ -131,6 +127,26 @@ func setImageOCRText(c *gin.Context) { util.SetAssetText(path, text) } +func ocr(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + path := arg["path"].(string) + force := false + if forceArg := arg["force"]; nil != forceArg { + force = forceArg.(bool) + } + + ret.Data = map[string]interface{}{ + "text": util.OcrAsset(path, force), + } +} + func renameAsset(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index 567cb37ad..2290ee016 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -266,6 +266,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/asset/renameAsset", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, renameAsset) ginServer.Handle("POST", "/api/asset/getImageOCRText", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, getImageOCRText) ginServer.Handle("POST", "/api/asset/setImageOCRText", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, setImageOCRText) + ginServer.Handle("POST", "/api/asset/ocr", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, ocr) ginServer.Handle("POST", "/api/asset/fullReindexAssetContent", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, fullReindexAssetContent) ginServer.Handle("POST", "/api/asset/statAsset", model.CheckAuth, model.CheckAdminRole, statAsset) diff --git a/kernel/sql/block.go b/kernel/sql/block.go index 0c98a22a7..f6efa0152 100644 --- a/kernel/sql/block.go +++ b/kernel/sql/block.go @@ -198,7 +198,7 @@ func nodeStaticContent(node *ast.Node, excludeTypes []string, includeTextMarkATi var linkDestStr, ocrText string if nil != linkDest { linkDestStr = linkDest.TokensStr() - ocrText = util.GetAssetText(linkDestStr, false) + ocrText = util.OcrAsset(linkDestStr, false) } linkText := n.ChildByType(ast.NodeLinkText) diff --git a/kernel/util/ocr.go b/kernel/util/ocr.go index 8d280cc4e..3f2e8c3b6 100644 --- a/kernel/util/ocr.go +++ b/kernel/util/ocr.go @@ -102,7 +102,7 @@ func LoadAssetsTexts() { } func SaveAssetsTexts() { - if !assetsTextsChanged.Load() || !TesseractEnabled { + if !assetsTextsChanged.Load() { return } @@ -149,7 +149,7 @@ func ExistsAssetText(asset string) (ret bool) { return } -func GetAssetText(asset string, force bool) (ret string) { +func OcrAsset(asset string, force bool) (ret string) { if !force { assetsTextsLock.Lock() ret = assetsTexts[asset] @@ -170,6 +170,12 @@ func GetAssetText(asset string, force bool) (ret string) { return } +// https://github.com/siyuan-note/siyuan/pull/11708 +func GetAssetText(asset string) (ret string) { + ret = assetsTexts[asset] + return +} + func IsTesseractExtractable(p string) bool { lowerName := strings.ToLower(p) return strings.HasSuffix(lowerName, ".png") || strings.HasSuffix(lowerName, ".jpg") || strings.HasSuffix(lowerName, ".jpeg")