Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/dev' into dev

Vanessa 1 anno fa
parent
commit
f2c593b807
1 ha cambiato i file con 56 aggiunte e 1 eliminazioni
  1. 56 1
      kernel/model/history.go

+ 56 - 1
kernel/model/history.go

@@ -69,7 +69,8 @@ func generateFileHistory() {
 		box.generateDocHistory0()
 	}
 
-	// 目前没有生成资源文件历史 https://github.com/siyuan-note/siyuan/issues/11177
+	// 生成资源文件历史
+	generateAssetsHistory()
 
 	historyDir := util.HistoryDir
 	clearOutdatedHistoryDir(historyDir)
@@ -478,6 +479,35 @@ func GetNotebookHistory() (ret []*History, err error) {
 	return
 }
 
+func generateAssetsHistory() {
+	files := recentModifiedAssets()
+	if 1 > len(files) {
+		return
+	}
+
+	historyDir, err := GetHistoryDir(HistoryOpUpdate)
+	if nil != err {
+		logging.LogErrorf("get history dir failed: %s", err)
+		return
+	}
+
+	for _, file := range files {
+		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)
+			return
+		}
+
+		if err = filelock.Copy(file, historyPath); nil != err {
+			logging.LogErrorf("copy file [%s] to [%s] failed: %s", file, historyPath, err)
+			return
+		}
+	}
+
+	indexHistoryDir(filepath.Base(historyDir), util.NewLute())
+	return
+}
+
 func (box *Box) generateDocHistory0() {
 	files := box.recentModifiedDocs()
 	if 1 > len(files) {
@@ -596,6 +626,31 @@ func (box *Box) recentModifiedDocs() (ret []string) {
 	return
 }
 
+var (
+	assetsUpdated = map[string]int64{}
+)
+
+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
+		}
+
+		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
+	})
+	return
+}
+
 const (
 	HistoryOpClean   = "clean"
 	HistoryOpUpdate  = "update"