From f77f82258e59844cd89085cf530902360fadf1fa Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 14 Sep 2023 00:51:20 +0800 Subject: [PATCH] :art: Sort tx queue Undo and then redo after Shift+Enter trigger status exception https://github.com/siyuan-note/siyuan/issues/9178 --- kernel/api/transaction.go | 4 ++++ kernel/model/transaction.go | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/kernel/api/transaction.go b/kernel/api/transaction.go index 2d4b84b98..ba6dbc2a3 100644 --- a/kernel/api/transaction.go +++ b/kernel/api/transaction.go @@ -53,12 +53,16 @@ func performTransactions(c *gin.Context) { return } + timestamp := int64(arg["reqId"].(float64)) var transactions []*model.Transaction if err = gulu.JSON.UnmarshalJSON(data, &transactions); nil != err { ret.Code = -1 ret.Msg = "parses request failed" return } + for _, transaction := range transactions { + transaction.Timestamp = timestamp + } model.PerformTransactions(&transactions) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 1a6f64913..270da4e60 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -20,6 +20,7 @@ import ( "bytes" "fmt" "path/filepath" + "sort" "strings" "sync" "time" @@ -152,6 +153,9 @@ func mergeTx() (ret *Transaction) { func PerformTransactions(transactions *[]*Transaction) { txQueueLock.Lock() txQueue = append(txQueue, *transactions...) + sort.Slice(txQueue, func(i, j int) bool { + return txQueue[i].Timestamp < txQueue[j].Timestamp + }) txQueueLock.Unlock() return } @@ -1101,6 +1105,7 @@ type Operation struct { } type Transaction struct { + Timestamp int64 `json:"timestamp"` DoOperations []*Operation `json:"doOperations"` UndoOperations []*Operation `json:"undoOperations"`