diff --git a/kernel/cache/asset.go b/kernel/cache/asset.go index a17cc8699..524cf35ef 100644 --- a/kernel/cache/asset.go +++ b/kernel/cache/asset.go @@ -41,7 +41,10 @@ func GetAssets() (ret map[string]*Asset) { assetsLock.Lock() defer assetsLock.Unlock() - ret = assetsCache + ret = map[string]*Asset{} + for k, v := range assetsCache { + ret[k] = v + } return } diff --git a/kernel/model/history.go b/kernel/model/history.go index d202c8548..666779672 100644 --- a/kernel/model/history.go +++ b/kernel/model/history.go @@ -36,6 +36,7 @@ import ( "github.com/siyuan-note/eventbus" "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" + "github.com/siyuan-note/siyuan/kernel/cache" "github.com/siyuan-note/siyuan/kernel/conf" "github.com/siyuan-note/siyuan/kernel/filesys" "github.com/siyuan-note/siyuan/kernel/search" @@ -480,8 +481,8 @@ func GetNotebookHistory() (ret []*History, err error) { } func generateAssetsHistory() { - files := recentModifiedAssets() - if 1 > len(files) { + assets := recentModifiedAssets() + if 1 > len(assets) { return } @@ -491,7 +492,7 @@ func generateAssetsHistory() { return } - for _, file := range files { + for _, file := range assets { historyPath := filepath.Join(historyDir, "assets", strings.TrimPrefix(file, filepath.Join(util.DataDir, "assets"))) if err = os.MkdirAll(filepath.Dir(historyPath), 0755); nil != err { logging.LogErrorf("generate history failed: %s", err) @@ -626,28 +627,16 @@ func (box *Box) recentModifiedDocs() (ret []string) { return } -var ( - assetsUpdated = map[string]int64{} -) +var assetsLatestHistoryTime = time.Now().Unix() func recentModifiedAssets() (ret []string) { - filelock.Walk(filepath.Join(util.DataDir, "assets"), func(path string, info fs.FileInfo, err error) error { - if nil == info { - return nil + assets := cache.GetAssets() + for _, asset := range assets { + if asset.Updated > assetsLatestHistoryTime { + ret = append(ret, filepath.Join(util.DataDir, asset.Path)) } - - if info.IsDir() { - return nil - } - - updated := info.ModTime().Unix() - oldUpdated, ok := assetsUpdated[path] - if ok && updated > oldUpdated { - ret = append(ret, path) - } - assetsUpdated[path] = updated - return nil - }) + } + assetsLatestHistoryTime = time.Now().Unix() return }