mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 07:00:12 +01:00
🐛 删除未引用资源后已删除的资源仍能搜索到 Fix https://github.com/siyuan-note/siyuan/issues/6737
This commit is contained in:
parent
05ee2250c0
commit
862b740e7a
2 changed files with 31 additions and 13 deletions
20
kernel/cache/asset.go
vendored
20
kernel/cache/asset.go
vendored
|
|
@ -33,9 +33,24 @@ type Asset struct {
|
||||||
Updated int64 `json:"updated"`
|
Updated int64 `json:"updated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var Assets = map[string]*Asset{}
|
var assetsCache = map[string]*Asset{}
|
||||||
var assetsLock = sync.Mutex{}
|
var assetsLock = sync.Mutex{}
|
||||||
|
|
||||||
|
func GetAssets() (ret map[string]*Asset) {
|
||||||
|
assetsLock.Lock()
|
||||||
|
defer assetsLock.Unlock()
|
||||||
|
|
||||||
|
ret = assetsCache
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveAsset(path string) {
|
||||||
|
assetsLock.Lock()
|
||||||
|
defer assetsLock.Unlock()
|
||||||
|
|
||||||
|
delete(assetsCache, path)
|
||||||
|
}
|
||||||
|
|
||||||
func LoadAssets() {
|
func LoadAssets() {
|
||||||
defer logging.Recover()
|
defer logging.Recover()
|
||||||
|
|
||||||
|
|
@ -43,6 +58,7 @@ func LoadAssets() {
|
||||||
assetsLock.Lock()
|
assetsLock.Lock()
|
||||||
defer assetsLock.Unlock()
|
defer assetsLock.Unlock()
|
||||||
|
|
||||||
|
assetsCache = map[string]*Asset{}
|
||||||
assets := util.GetDataAssetsAbsPath()
|
assets := util.GetDataAssetsAbsPath()
|
||||||
filepath.Walk(assets, func(path string, info fs.FileInfo, err error) error {
|
filepath.Walk(assets, func(path string, info fs.FileInfo, err error) error {
|
||||||
if nil == info {
|
if nil == info {
|
||||||
|
|
@ -60,7 +76,7 @@ func LoadAssets() {
|
||||||
|
|
||||||
hName := util.RemoveID(info.Name())
|
hName := util.RemoveID(info.Name())
|
||||||
path = "assets" + filepath.ToSlash(strings.TrimPrefix(path, assets))
|
path = "assets" + filepath.ToSlash(strings.TrimPrefix(path, assets))
|
||||||
Assets[path] = &Asset{
|
assetsCache[path] = &Asset{
|
||||||
HName: hName,
|
HName: hName,
|
||||||
Path: path,
|
Path: path,
|
||||||
Updated: info.ModTime().UnixMilli(),
|
Updated: info.ModTime().UnixMilli(),
|
||||||
|
|
|
||||||
|
|
@ -208,7 +208,7 @@ func SearchAssetsByName(keyword string) (ret []*cache.Asset) {
|
||||||
ret = []*cache.Asset{}
|
ret = []*cache.Asset{}
|
||||||
|
|
||||||
count := 0
|
count := 0
|
||||||
for _, asset := range cache.Assets {
|
for _, asset := range cache.GetAssets() {
|
||||||
if !strings.Contains(strings.ToLower(asset.HName), strings.ToLower(keyword)) {
|
if !strings.Contains(strings.ToLower(asset.HName), strings.ToLower(keyword)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
@ -471,13 +471,14 @@ func RemoveUnusedAssets() (ret []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
indexHistoryDir(filepath.Base(historyDir), NewLute())
|
indexHistoryDir(filepath.Base(historyDir), NewLute())
|
||||||
|
cache.LoadAssets()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func RemoveUnusedAsset(p string) (ret string) {
|
func RemoveUnusedAsset(p string) (ret string) {
|
||||||
p = filepath.Join(util.DataDir, p)
|
absPath := filepath.Join(util.DataDir, p)
|
||||||
if !gulu.File.IsExist(p) {
|
if !gulu.File.IsExist(absPath) {
|
||||||
return p
|
return absPath
|
||||||
}
|
}
|
||||||
|
|
||||||
historyDir, err := GetHistoryDir(HistoryOpClean)
|
historyDir, err := GetHistoryDir(HistoryOpClean)
|
||||||
|
|
@ -486,24 +487,25 @@ func RemoveUnusedAsset(p string) (ret string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
newP := strings.TrimPrefix(p, util.DataDir)
|
newP := strings.TrimPrefix(absPath, util.DataDir)
|
||||||
historyPath := filepath.Join(historyDir, newP)
|
historyPath := filepath.Join(historyDir, newP)
|
||||||
if gulu.File.IsExist(p) {
|
if gulu.File.IsExist(absPath) {
|
||||||
if err = gulu.File.Copy(p, historyPath); nil != err {
|
if err = gulu.File.Copy(absPath, historyPath); nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
hash, _ := util.GetEtag(p)
|
hash, _ := util.GetEtag(absPath)
|
||||||
sql.DeleteAssetsByHashes([]string{hash})
|
sql.DeleteAssetsByHashes([]string{hash})
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = os.RemoveAll(p); nil != err {
|
if err = os.RemoveAll(absPath); nil != err {
|
||||||
logging.LogErrorf("remove unused asset [%s] failed: %s", p, err)
|
logging.LogErrorf("remove unused asset [%s] failed: %s", absPath, err)
|
||||||
}
|
}
|
||||||
ret = p
|
ret = absPath
|
||||||
IncSync()
|
IncSync()
|
||||||
|
|
||||||
indexHistoryDir(filepath.Base(historyDir), NewLute())
|
indexHistoryDir(filepath.Base(historyDir), NewLute())
|
||||||
|
cache.RemoveAsset(p)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue