mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-16 22:50:13 +01:00
🎨 导入 .sy.zip 时增量建立索引 https://github.com/siyuan-note/siyuan/issues/7123
This commit is contained in:
parent
7401ae845a
commit
772984fe1b
4 changed files with 51 additions and 6 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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") {
|
||||||
|
|
|
||||||
|
|
@ -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 ""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue