Browse Source

:art: Reindex only the current document after rolling back the document https://github.com/siyuan-note/siyuan/issues/12320

Daniel 10 months ago
parent
commit
9f1906c003
1 changed files with 17 additions and 4 deletions
  1. 17 4
      kernel/model/history.go

+ 17 - 4
kernel/model/history.go

@@ -228,7 +228,7 @@ func RollbackDocHistory(boxID, historyPath string) (err error) {
 	WaitForWritingFiles()
 	WaitForWritingFiles()
 
 
 	srcPath := historyPath
 	srcPath := historyPath
-	var destPath string
+	var destPath, parentHPath string
 	baseName := filepath.Base(historyPath)
 	baseName := filepath.Base(historyPath)
 	id := strings.TrimSuffix(baseName, ".sy")
 	id := strings.TrimSuffix(baseName, ".sy")
 
 
@@ -239,7 +239,7 @@ func RollbackDocHistory(boxID, historyPath string) (err error) {
 		}
 		}
 	}
 	}
 
 
-	destPath, err = getRollbackDockPath(boxID, historyPath)
+	destPath, parentHPath, err = getRollbackDockPath(boxID, historyPath)
 	if nil != err {
 	if nil != err {
 		return
 		return
 	}
 	}
@@ -269,7 +269,19 @@ func RollbackDocHistory(boxID, historyPath string) (err error) {
 		}
 		}
 	}
 	}
 
 
-	FullReindex()
+	tree.Box = boxID
+	tree.Path = filepath.ToSlash(strings.TrimPrefix(destPath, util.DataDir+string(os.PathSeparator)+boxID))
+	tree.HPath = parentHPath + "/" + tree.Root.IALAttr("title")
+
+	// 仅重新索引该文档,不进行全量索引
+	// Reindex only the current document after rolling back the document https://github.com/siyuan-note/siyuan/issues/12320
+	treenode.RemoveBlockTree(id)
+	treenode.IndexBlockTree(tree)
+	sql.RemoveTreeQueue(id)
+	sql.IndexTreeQueue(tree)
+	util.PushReloadFiletree()
+	util.PushMsg(Conf.Language(102), 3000)
+
 	IncSync()
 	IncSync()
 	go func() {
 	go func() {
 		sql.WaitForWritingDatabase()
 		sql.WaitForWritingDatabase()
@@ -297,7 +309,7 @@ func RollbackDocHistory(boxID, historyPath string) (err error) {
 	return nil
 	return nil
 }
 }
 
 
-func getRollbackDockPath(boxID, historyPath string) (destPath string, err error) {
+func getRollbackDockPath(boxID, historyPath string) (destPath, parentHPath string, err error) {
 	baseName := filepath.Base(historyPath)
 	baseName := filepath.Base(historyPath)
 	parentID := strings.TrimSuffix(filepath.Base(filepath.Dir(historyPath)), ".sy")
 	parentID := strings.TrimSuffix(filepath.Base(filepath.Dir(historyPath)), ".sy")
 	parentWorkingDoc := treenode.GetBlockTree(parentID)
 	parentWorkingDoc := treenode.GetBlockTree(parentID)
@@ -309,6 +321,7 @@ func getRollbackDockPath(boxID, historyPath string) (destPath string, err error)
 			return
 			return
 		}
 		}
 		destPath = filepath.Join(parentDir, baseName)
 		destPath = filepath.Join(parentDir, baseName)
+		parentHPath = parentWorkingDoc.HPath
 	} else {
 	} else {
 		// 父路径如果不是文档,则恢复到笔记本根路径下
 		// 父路径如果不是文档,则恢复到笔记本根路径下
 		destPath = filepath.Join(util.DataDir, boxID, baseName)
 		destPath = filepath.Join(util.DataDir, boxID, baseName)