🎨 导入 .sy.zip 时增量建立索引 https://github.com/siyuan-note/siyuan/issues/7123

This commit is contained in:
Liang Ding 2023-01-19 17:13:27 +08:00
parent 7401ae845a
commit 772984fe1b
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
4 changed files with 51 additions and 6 deletions

View file

@ -321,6 +321,7 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
} }
} }
// 将包含的资源文件统一移动到 data/assets/ 下
var assetsDirs []string var assetsDirs []string
filepath.Walk(unzipRootPath, func(path string, info fs.FileInfo, err error) error { filepath.Walk(unzipRootPath, func(path string, info fs.FileInfo, err error) error {
if strings.Contains(path, "assets") && info.IsDir() { if strings.Contains(path, "assets") && info.IsDir() {
@ -328,9 +329,9 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
} }
return nil return nil
}) })
dataAssets := filepath.Join(util.DataDir, "assets")
for _, assets := range assetsDirs { for _, assets := range assetsDirs {
if gulu.File.IsDir(assets) { if gulu.File.IsDir(assets) {
dataAssets := filepath.Join(util.DataDir, "assets")
if err = filelock.Copy(assets, dataAssets); nil != err { if err = filelock.Copy(assets, dataAssets); nil != err {
logging.LogErrorf("copy assets from [%s] to [%s] failed: %s", assets, dataAssets, err) logging.LogErrorf("copy assets from [%s] to [%s] failed: %s", assets, dataAssets, err)
return return
@ -356,14 +357,47 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
return 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 { if err = filelock.RoboCopy(unzipRootPath, targetDir); nil != err {
logging.LogErrorf("copy data dir from [%s] to [%s] failed: %s", unzipRootPath, util.DataDir, err) logging.LogErrorf("copy data dir from [%s] to [%s] failed: %s", unzipRootPath, util.DataDir, err)
err = errors.New("copy data failed") err = errors.New("copy data failed")
return 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() IncSync()
FullReindex()
return return
} }

View file

@ -93,8 +93,7 @@ func getUnOCRAssetsAbsPaths() (ret []string) {
var assetsPaths []string var assetsPaths []string
assets := cache.GetAssets() assets := cache.GetAssets()
for _, asset := range assets { for _, asset := range assets {
lowerName := strings.ToLower(asset.Path) if !util.IsTesseractExtractable(asset.Path) {
if !strings.HasSuffix(lowerName, ".png") && !strings.HasSuffix(lowerName, ".jpg") && !strings.HasSuffix(lowerName, ".jpeg") {
continue continue
} }
assetsPaths = append(assetsPaths, asset.Path) assetsPaths = append(assetsPaths, asset.Path)

View file

@ -103,8 +103,11 @@ func pagedPaths(localPath string, pageSize int) (ret map[int][]string) {
ret = map[int][]string{} ret = map[int][]string{}
page := 1 page := 1
filepath.Walk(localPath, func(path string, info fs.FileInfo, err error) error { filepath.Walk(localPath, func(path string, info fs.FileInfo, err error) error {
if info.IsDir() && strings.HasPrefix(info.Name(), ".") { if info.IsDir() {
return filepath.SkipDir if strings.HasPrefix(info.Name(), ".") {
return filepath.SkipDir
}
return nil
} }
if !strings.HasSuffix(info.Name(), ".sy") { if !strings.HasSuffix(info.Name(), ".sy") {

View file

@ -59,11 +59,20 @@ func GetAssetText(asset string) string {
return ret 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 { func Tesseract(imgAbsPath string) string {
if ContainerStd != Container || !TesseractEnabled { if ContainerStd != Container || !TesseractEnabled {
return "" return ""
} }
if !IsTesseractExtractable(imgAbsPath) {
return ""
}
info, err := os.Stat(imgAbsPath) info, err := os.Stat(imgAbsPath)
if nil != err { if nil != err {
return "" return ""