Procházet zdrojové kódy

:art: List file/asset history following the limit of editor history retention days https://github.com/siyuan-note/siyuan/issues/9723

Daniel před 1 rokem
rodič
revize
f5205d846c
3 změnil soubory, kde provedl 15 přidání a 14 odebrání
  1. 5 4
      kernel/model/history.go
  2. 3 3
      kernel/sql/history.go
  3. 7 7
      kernel/sql/queue_history.go

+ 5 - 4
kernel/model/history.go

@@ -500,6 +500,7 @@ func clearOutdatedHistoryDir(historyDir string) {
 	}
 
 	now := time.Now()
+	ago := now.Add(-24 * time.Hour * time.Duration(Conf.Editor.HistoryRetentionDays)).Unix()
 	var removes []string
 	for _, dir := range dirs {
 		dirInfo, err := dir.Info()
@@ -507,7 +508,7 @@ func clearOutdatedHistoryDir(historyDir string) {
 			logging.LogErrorf("read history dir [%s] failed: %s", dir.Name(), err)
 			continue
 		}
-		if Conf.Editor.HistoryRetentionDays < int(now.Sub(dirInfo.ModTime()).Hours()/24) {
+		if dirInfo.ModTime().Unix() < ago {
 			removes = append(removes, filepath.Join(historyDir, dir.Name()))
 		}
 	}
@@ -517,10 +518,10 @@ func clearOutdatedHistoryDir(historyDir string) {
 			continue
 		}
 		//logging.LogInfof("auto removed history dir [%s]", dir)
-
-		// 清理历史库
-		sql.DeleteHistoriesByPathPrefixQueue(dir)
 	}
+
+	// 清理历史库
+	sql.DeleteOutdatedHistories(fmt.Sprintf("%d", ago))
 }
 
 var boxLatestHistoryTime = map[string]time.Time{}

+ 3 - 3
kernel/sql/history.go

@@ -104,9 +104,9 @@ func queryHistory(query string, args ...interface{}) (*sql.Rows, error) {
 	return historyDB.Query(query, args...)
 }
 
-func deleteHistoriesByPathPrefix(tx *sql.Tx, pathPrefix string, context map[string]interface{}) (err error) {
-	stmt := "DELETE FROM histories_fts_case_insensitive WHERE path LIKE ?"
-	if err = execStmtTx(tx, stmt, pathPrefix+"%"); nil != err {
+func deleteOutdatedHistories(tx *sql.Tx, before string, context map[string]interface{}) (err error) {
+	stmt := "DELETE FROM histories_fts_case_insensitive WHERE created < ?"
+	if err = execStmtTx(tx, stmt, before); nil != err {
 		return
 	}
 	return

+ 7 - 7
kernel/sql/queue_history.go

@@ -39,10 +39,10 @@ var (
 
 type historyDBQueueOperation struct {
 	inQueueTime time.Time
-	action      string // index/deletePathPrefix
+	action      string // index/deleteOutdated
 
-	histories  []*History // index
-	pathPrefix string     // deletePathPrefix
+	histories []*History // index
+	before    string     // deleteOutdated
 }
 
 func FlushHistoryTxJob() {
@@ -111,8 +111,8 @@ func execHistoryOp(op *historyDBQueueOperation, tx *sql.Tx, context map[string]i
 	switch op.action {
 	case "index":
 		err = insertHistories(tx, op.histories, context)
-	case "deletePathPrefix":
-		err = deleteHistoriesByPathPrefix(tx, op.pathPrefix, context)
+	case "deleteOutdated":
+		err = deleteOutdatedHistories(tx, op.before, context)
 	default:
 		msg := fmt.Sprintf("unknown history operation [%s]", op.action)
 		logging.LogErrorf(msg)
@@ -121,11 +121,11 @@ func execHistoryOp(op *historyDBQueueOperation, tx *sql.Tx, context map[string]i
 	return
 }
 
-func DeleteHistoriesByPathPrefixQueue(pathPrefix string) {
+func DeleteOutdatedHistories(before string) {
 	historyDBQueueLock.Lock()
 	defer historyDBQueueLock.Unlock()
 
-	newOp := &historyDBQueueOperation{inQueueTime: time.Now(), action: "deletePathPrefix", pathPrefix: pathPrefix}
+	newOp := &historyDBQueueOperation{inQueueTime: time.Now(), action: "deleteOutdated", before: before}
 	historyOperationQueue = append(historyOperationQueue, newOp)
 }