diff --git a/kernel/model/import.go b/kernel/model/import.go index e2a207795..2edcd3be4 100644 --- a/kernel/model/import.go +++ b/kernel/model/import.go @@ -321,6 +321,7 @@ func ImportSY(zipPath, boxID, toPath string) (err error) { } } + // 将包含的资源文件统一移动到 data/assets/ 下 var assetsDirs []string filepath.Walk(unzipRootPath, func(path string, info fs.FileInfo, err error) error { if strings.Contains(path, "assets") && info.IsDir() { @@ -328,9 +329,9 @@ func ImportSY(zipPath, boxID, toPath string) (err error) { } return nil }) + dataAssets := filepath.Join(util.DataDir, "assets") for _, assets := range assetsDirs { if gulu.File.IsDir(assets) { - dataAssets := filepath.Join(util.DataDir, "assets") if err = filelock.Copy(assets, dataAssets); nil != err { logging.LogErrorf("copy assets from [%s] to [%s] failed: %s", assets, dataAssets, err) return @@ -356,14 +357,47 @@ func ImportSY(zipPath, boxID, toPath string) (err error) { return } + var treePaths []string + filepath.Walk(unzipRootPath, func(path string, info fs.FileInfo, err error) error { + if info.IsDir() { + if strings.HasPrefix(info.Name(), ".") { + return filepath.SkipDir + } + return nil + } + + if !strings.HasSuffix(info.Name(), ".sy") { + return nil + } + + p := strings.TrimPrefix(path, unzipRootPath) + p = filepath.ToSlash(p) + treePaths = append(treePaths, p) + return nil + }) + if err = filelock.RoboCopy(unzipRootPath, targetDir); nil != err { logging.LogErrorf("copy data dir from [%s] to [%s] failed: %s", unzipRootPath, util.DataDir, err) err = errors.New("copy data failed") return } + boxAbsPath := filepath.Join(util.DataDir, boxID) + for _, treePath := range treePaths { + absPath := filepath.Join(targetDir, treePath) + p := strings.TrimPrefix(absPath, boxAbsPath) + p = filepath.ToSlash(p) + tree, err := LoadTree(boxID, p) + if nil != err { + logging.LogErrorf("load tree [%s] failed: %s", treePath, err) + continue + } + + treenode.IndexBlockTree(tree) + sql.UpsertTreeQueue(tree) + } + IncSync() - FullReindex() return } diff --git a/kernel/model/ocr.go b/kernel/model/ocr.go index fa971bc93..bbd15a27d 100644 --- a/kernel/model/ocr.go +++ b/kernel/model/ocr.go @@ -93,8 +93,7 @@ func getUnOCRAssetsAbsPaths() (ret []string) { var assetsPaths []string assets := cache.GetAssets() for _, asset := range assets { - lowerName := strings.ToLower(asset.Path) - if !strings.HasSuffix(lowerName, ".png") && !strings.HasSuffix(lowerName, ".jpg") && !strings.HasSuffix(lowerName, ".jpeg") { + if !util.IsTesseractExtractable(asset.Path) { continue } assetsPaths = append(assetsPaths, asset.Path) diff --git a/kernel/model/tree.go b/kernel/model/tree.go index 35b1a9f2f..e80c43316 100644 --- a/kernel/model/tree.go +++ b/kernel/model/tree.go @@ -103,8 +103,11 @@ func pagedPaths(localPath string, pageSize int) (ret map[int][]string) { ret = map[int][]string{} page := 1 filepath.Walk(localPath, func(path string, info fs.FileInfo, err error) error { - if info.IsDir() && strings.HasPrefix(info.Name(), ".") { - return filepath.SkipDir + if info.IsDir() { + if strings.HasPrefix(info.Name(), ".") { + return filepath.SkipDir + } + return nil } if !strings.HasSuffix(info.Name(), ".sy") { diff --git a/kernel/util/tesseract.go b/kernel/util/tesseract.go index 04780bd83..3f433635e 100644 --- a/kernel/util/tesseract.go +++ b/kernel/util/tesseract.go @@ -59,11 +59,20 @@ func GetAssetText(asset string) string { return ret } +func IsTesseractExtractable(p string) bool { + lowerName := strings.ToLower(p) + return strings.HasSuffix(lowerName, ".png") || strings.HasSuffix(lowerName, ".jpg") || strings.HasSuffix(lowerName, ".jpeg") +} + func Tesseract(imgAbsPath string) string { if ContainerStd != Container || !TesseractEnabled { return "" } + if !IsTesseractExtractable(imgAbsPath) { + return "" + } + info, err := os.Stat(imgAbsPath) if nil != err { return ""