🐛 删除未引用资源后已删除的资源仍能搜索到 Fix https://github.com/siyuan-note/siyuan/issues/6737

This commit is contained in:
Liang Ding 2022-11-29 10:59:05 +08:00
parent 05ee2250c0
commit 862b740e7a
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 31 additions and 13 deletions

20
kernel/cache/asset.go vendored
View file

@ -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(),

View file

@ -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
} }