Просмотр исходного кода

:bug: 折叠标题移动到下方后触发状态异常并导致数据丢失 Fix https://github.com/siyuan-note/siyuan/issues/7163

Liang Ding 2 лет назад
Родитель
Сommit
b3edfec60e
1 измененных файлов с 14 добавлено и 10 удалено
  1. 14 10
      kernel/model/transaction.go

+ 14 - 10
kernel/model/transaction.go

@@ -311,11 +311,8 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) {
 			}
 		}
 
-		for _, headingChild := range headingChildren {
-			if headingChild.ID == targetNode.ID {
-				// 不能将折叠标题移动到自己下方节点的前或后 https://github.com/siyuan-note/siyuan/issues/7163
-				return
-			}
+		if isMovingFoldHeadingIntoSelf(targetNode, headingChildren) {
+			return
 		}
 
 		for i := len(headingChildren) - 1; -1 < i; i-- {
@@ -360,11 +357,8 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) {
 		return &TxErr{code: TxErrCodeBlockNotFound, id: targetParentID}
 	}
 
-	for _, headingChild := range headingChildren {
-		if headingChild.ID == targetNode.ID {
-			// 不能将折叠标题移动到自己下方节点的前或后 https://github.com/siyuan-note/siyuan/issues/7163
-			return
-		}
+	if isMovingFoldHeadingIntoSelf(targetNode, headingChildren) {
+		return
 	}
 
 	processed := false
@@ -421,6 +415,16 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) {
 	return
 }
 
+func isMovingFoldHeadingIntoSelf(targetNode *ast.Node, headingChildren []*ast.Node) bool {
+	for _, headingChild := range headingChildren {
+		if headingChild.ID == targetNode.ID {
+			// 不能将折叠标题移动到自己下方节点的前或后 https://github.com/siyuan-note/siyuan/issues/7163
+			return true
+		}
+	}
+	return false
+}
+
 func (tx *Transaction) doPrependInsert(operation *Operation) (ret *TxErr) {
 	var err error
 	block := treenode.GetBlockTree(operation.ParentID)