瀏覽代碼

:art: 改进移动文档性能 https://github.com/siyuan-note/siyuan/issues/7422

Liang Ding 2 年之前
父節點
當前提交
4e58f47a25
共有 2 個文件被更改,包括 23 次插入3 次删除
  1. 1 1
      kernel/model/box.go
  2. 22 2
      kernel/sql/queue.go

+ 1 - 1
kernel/model/box.go

@@ -397,7 +397,7 @@ func (box *Box) moveTrees0(files []*FileInfo) {
 		}
 		}
 
 
 		treenode.SetBlockTreePath(subTree)
 		treenode.SetBlockTreePath(subTree)
-		sql.RenameTreeQueue(subTree)
+		sql.RenameSubTreeQueue(subTree)
 		msg := fmt.Sprintf(Conf.Language(107), subTree.HPath)
 		msg := fmt.Sprintf(Conf.Language(107), subTree.HPath)
 		util.PushStatusBar(msg)
 		util.PushStatusBar(msg)
 	}
 	}

+ 22 - 2
kernel/sql/queue.go

@@ -41,7 +41,7 @@ var (
 
 
 type dbQueueOperation struct {
 type dbQueueOperation struct {
 	inQueueTime time.Time
 	inQueueTime time.Time
-	action      string // upsert/delete/delete_id/rename/delete_box/delete_box_refs/insert_refs/index/delete_ids/update_block_content/delete_assets
+	action      string // upsert/delete/delete_id/rename/rename_sub_tree/delete_box/delete_box_refs/insert_refs/index/delete_ids/update_block_content/delete_assets
 
 
 	indexPath                     string      // index
 	indexPath                     string      // index
 	upsertTree                    *parse.Tree // upsert/insert_refs
 	upsertTree                    *parse.Tree // upsert/insert_refs
@@ -49,7 +49,7 @@ type dbQueueOperation struct {
 	removeTreeIDBox, removeTreeID string      // delete_id
 	removeTreeIDBox, removeTreeID string      // delete_id
 	removeTreeIDs                 []string    // delete_ids
 	removeTreeIDs                 []string    // delete_ids
 	box                           string      // delete_box/delete_box_refs/index
 	box                           string      // delete_box/delete_box_refs/index
-	renameTree                    *parse.Tree // rename
+	renameTree                    *parse.Tree // rename/rename_sub_tree
 	block                         *Block      // update_block_content
 	block                         *Block      // update_block_content
 	removeAssetHashes             []string    // delete_assets
 	removeAssetHashes             []string    // delete_assets
 }
 }
@@ -172,6 +172,8 @@ func execOp(op *dbQueueOperation, tx *sql.Tx, context map[string]interface{}) (e
 			break
 			break
 		}
 		}
 		err = updateRootContent(tx, path.Base(op.renameTree.HPath), op.renameTree.Root.IALAttr("updated"), op.renameTree.ID)
 		err = updateRootContent(tx, path.Base(op.renameTree.HPath), op.renameTree.Root.IALAttr("updated"), op.renameTree.ID)
+	case "rename_sub_tree":
+		err = batchUpdateHPath(tx, op.renameTree.Box, op.renameTree.ID, op.renameTree.HPath)
 	case "delete_box":
 	case "delete_box":
 		err = deleteByBoxTx(tx, op.box)
 		err = deleteByBoxTx(tx, op.box)
 	case "delete_box_refs":
 	case "delete_box_refs":
@@ -320,6 +322,24 @@ func RenameTreeQueue(tree *parse.Tree) {
 	operationQueue = append(operationQueue, newOp)
 	operationQueue = append(operationQueue, newOp)
 }
 }
 
 
+func RenameSubTreeQueue(tree *parse.Tree) {
+	dbQueueLock.Lock()
+	defer dbQueueLock.Unlock()
+
+	newOp := &dbQueueOperation{
+		renameTree:  tree,
+		inQueueTime: time.Now(),
+		action:      "rename_sub_tree",
+	}
+	for i, op := range operationQueue {
+		if "rename_sub_tree" == op.action && op.renameTree.ID == tree.ID { // 相同树则覆盖
+			operationQueue[i] = newOp
+			return
+		}
+	}
+	operationQueue = append(operationQueue, newOp)
+}
+
 func RemoveTreeQueue(box, rootID string) {
 func RemoveTreeQueue(box, rootID string) {
 	dbQueueLock.Lock()
 	dbQueueLock.Lock()
 	defer dbQueueLock.Unlock()
 	defer dbQueueLock.Unlock()