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 1/6] :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"` From 1fde0611c37ba193704bd836e019cb8014e6e9cb Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 14 Sep 2023 01:27:11 +0800 Subject: [PATCH 2/6] :memo: https://ld246.com/article/1694622447855 --- app/changelogs/v2.10.6/v2.10.6.md | 12 ++++++++++++ app/changelogs/v2.10.6/v2.10.6_zh_CHT.md | 11 +++++++++++ app/changelogs/v2.10.6/v2.10.6_zh_CN.md | 13 +++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 app/changelogs/v2.10.6/v2.10.6.md create mode 100644 app/changelogs/v2.10.6/v2.10.6_zh_CHT.md create mode 100644 app/changelogs/v2.10.6/v2.10.6_zh_CN.md diff --git a/app/changelogs/v2.10.6/v2.10.6.md b/app/changelogs/v2.10.6/v2.10.6.md new file mode 100644 index 000000000..ee92476eb --- /dev/null +++ b/app/changelogs/v2.10.6/v2.10.6.md @@ -0,0 +1,12 @@ +## Overview + +This version fixes some defects, it is recommended to upgrade. + +Advertisement: Currently, `PRO Features` are in the early bird price stage, welcome to [buy](https://b3log.org/siyuan/pricing.html). + +Note: The annual `Subscription` includes `Pro features`. If you are an annual subscriber, you do not need to buy PRO Features separately. + +## Changelogs + +Below are the detailed changes in this version. + diff --git a/app/changelogs/v2.10.6/v2.10.6_zh_CHT.md b/app/changelogs/v2.10.6/v2.10.6_zh_CHT.md new file mode 100644 index 000000000..eaf631f9d --- /dev/null +++ b/app/changelogs/v2.10.6/v2.10.6_zh_CHT.md @@ -0,0 +1,11 @@ +## 概述 + +該版本修復了一些缺陷,建議升級。 + +廣告: 目前 `功能特性` 正處於早鳥價階段,歡迎[購買](https://b3log.org/siyuan/pricing.html)。 + +注:`年付訂閱` 包含 `功能特性`,如果你是訂閱會員,則無需單獨購買功能特性。 + +## 變更記錄 + +以下是此版本中的詳細變更。 \ No newline at end of file diff --git a/app/changelogs/v2.10.6/v2.10.6_zh_CN.md b/app/changelogs/v2.10.6/v2.10.6_zh_CN.md new file mode 100644 index 000000000..e68620430 --- /dev/null +++ b/app/changelogs/v2.10.6/v2.10.6_zh_CN.md @@ -0,0 +1,13 @@ +## 概述 + +该版本修复了一些缺陷,建议升级。 + +广告: 目前 `功能特性` 正处于早鸟价阶段,欢迎[购买](https://b3log.org/siyuan/pricing.html)。 + +注:`年付订阅` 包含 `功能特性`,如果你是订阅会员,则无需单独购买功能特性。 + +## 变更记录 + +以下是此版本中的详细变更。 + + From 7e2d2bfe3703c817859fb49ce5600b6cc4c0ec8c Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 14 Sep 2023 09:12:41 +0800 Subject: [PATCH 3/6] :art: Improve update tx --- kernel/model/transaction.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 270da4e60..c5d72351d 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -18,6 +18,7 @@ package model import ( "bytes" + "errors" "fmt" "path/filepath" "sort" @@ -696,11 +697,12 @@ func (tx *Transaction) doDelete(operation *Operation) (ret *TxErr) { var err error id := operation.ID tree, err := tx.loadTree(id) - if ErrBlockNotFound == err { - return nil // move 以后这里会空,算作正常情况 - } - if nil != err { + if errors.Is(err, ErrBlockNotFound) { + // move 以后这里会空,算作正常情况 + return + } + msg := fmt.Sprintf("load tree [%s] failed: %s", id, err) logging.LogErrorf(msg) return &TxErr{code: TxErrCodeBlockNotFound, id: id} @@ -926,6 +928,10 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { tree, err := tx.loadTree(id) if nil != err { + if errors.Is(err, ErrBlockNotFound) { + return + } + logging.LogErrorf("load tree [%s] failed: %s", id, err) return &TxErr{code: TxErrCodeBlockNotFound, id: id} } From 49c076b4e59855f70cc93f0f8fea2c5b91adface Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 14 Sep 2023 09:18:04 +0800 Subject: [PATCH 4/6] :memo: https://ld246.com/article/1694622447855 --- app/changelogs/v2.10.6/v2.10.6.md | 2 +- app/changelogs/v2.10.6/v2.10.6_zh_CHT.md | 2 +- app/changelogs/v2.10.6/v2.10.6_zh_CN.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/changelogs/v2.10.6/v2.10.6.md b/app/changelogs/v2.10.6/v2.10.6.md index ee92476eb..202fd2105 100644 --- a/app/changelogs/v2.10.6/v2.10.6.md +++ b/app/changelogs/v2.10.6/v2.10.6.md @@ -2,7 +2,7 @@ This version fixes some defects, it is recommended to upgrade. -Advertisement: Currently, `PRO Features` are in the early bird price stage, welcome to [buy](https://b3log.org/siyuan/pricing.html). +Advertisement: Currently, `PRO Features` are in the early bird price stage, welcome to [learn more](https://b3log.org/siyuan/pricing.html). Note: The annual `Subscription` includes `Pro features`. If you are an annual subscriber, you do not need to buy PRO Features separately. diff --git a/app/changelogs/v2.10.6/v2.10.6_zh_CHT.md b/app/changelogs/v2.10.6/v2.10.6_zh_CHT.md index eaf631f9d..1feca8642 100644 --- a/app/changelogs/v2.10.6/v2.10.6_zh_CHT.md +++ b/app/changelogs/v2.10.6/v2.10.6_zh_CHT.md @@ -2,7 +2,7 @@ 該版本修復了一些缺陷,建議升級。 -廣告: 目前 `功能特性` 正處於早鳥價階段,歡迎[購買](https://b3log.org/siyuan/pricing.html)。 +廣告: 目前 `功能特性` 正處於早鳥價階段,歡迎[了解](https://b3log.org/siyuan/pricing.html)。 注:`年付訂閱` 包含 `功能特性`,如果你是訂閱會員,則無需單獨購買功能特性。 diff --git a/app/changelogs/v2.10.6/v2.10.6_zh_CN.md b/app/changelogs/v2.10.6/v2.10.6_zh_CN.md index e68620430..c6c65a14c 100644 --- a/app/changelogs/v2.10.6/v2.10.6_zh_CN.md +++ b/app/changelogs/v2.10.6/v2.10.6_zh_CN.md @@ -2,7 +2,7 @@ 该版本修复了一些缺陷,建议升级。 -广告: 目前 `功能特性` 正处于早鸟价阶段,欢迎[购买](https://b3log.org/siyuan/pricing.html)。 +广告: 目前 `功能特性` 正处于早鸟价阶段,欢迎[了解](https://b3log.org/siyuan/pricing.html)。 注:`年付订阅` 包含 `功能特性`,如果你是订阅会员,则无需单独购买功能特性。 From 205e4a84365c837f95601ad0a5324674a50d89ea Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 14 Sep 2023 09:31:23 +0800 Subject: [PATCH 5/6] :art: Improve update tx --- kernel/model/transaction.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index c5d72351d..921bc1306 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -454,9 +454,9 @@ func (tx *Transaction) doPrependInsert(operation *Operation) (ret *TxErr) { var err error block := treenode.GetBlockTree(operation.ParentID) if nil == block { - msg := fmt.Sprintf("not found parent block [%s]", operation.ParentID) - logging.LogErrorf(msg) - return &TxErr{code: TxErrCodeBlockNotFound, id: operation.ParentID} + logging.LogErrorf("not found parent block [%s]", operation.ParentID) + util.ReloadUI() // 比如分屏后编辑器状态不一致,这里强制重新载入界面 + return } tree, err := tx.loadTree(block.ID) if nil != err { @@ -538,9 +538,9 @@ func (tx *Transaction) doAppendInsert(operation *Operation) (ret *TxErr) { var err error block := treenode.GetBlockTree(operation.ParentID) if nil == block { - msg := fmt.Sprintf("not found parent block [%s]", operation.ParentID) - logging.LogErrorf(msg) - return &TxErr{code: TxErrCodeBlockNotFound, id: operation.ParentID} + logging.LogErrorf("not found parent block [%s]", operation.ParentID) + util.ReloadUI() // 比如分屏后编辑器状态不一致,这里强制重新载入界面 + return } tree, err := tx.loadTree(block.ID) if nil != err { @@ -779,9 +779,9 @@ func (tx *Transaction) doInsert(operation *Operation) (ret *TxErr) { } } if nil == block { - msg := fmt.Sprintf("not found next block [%s]", operation.NextID) - logging.LogErrorf(msg) - return &TxErr{code: TxErrCodeBlockNotFound, id: operation.NextID} + logging.LogErrorf("not found block [%s, %s, %s]", operation.ParentID, operation.PreviousID, operation.NextID) + util.ReloadUI() // 比如分屏后编辑器状态不一致,这里强制重新载入界面 + return } tree, err := tx.loadTree(block.ID) From 6d56833567918d543d7fa4b7b8472421c7a242a5 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 14 Sep 2023 09:42:25 +0800 Subject: [PATCH 6/6] :art: Improve update tx --- kernel/model/transaction.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 921bc1306..90efbf22c 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -454,7 +454,7 @@ func (tx *Transaction) doPrependInsert(operation *Operation) (ret *TxErr) { var err error block := treenode.GetBlockTree(operation.ParentID) if nil == block { - logging.LogErrorf("not found parent block [%s]", operation.ParentID) + logging.LogWarnf("not found block [%s]", operation.ParentID) util.ReloadUI() // 比如分屏后编辑器状态不一致,这里强制重新载入界面 return } @@ -538,7 +538,7 @@ func (tx *Transaction) doAppendInsert(operation *Operation) (ret *TxErr) { var err error block := treenode.GetBlockTree(operation.ParentID) if nil == block { - logging.LogErrorf("not found parent block [%s]", operation.ParentID) + logging.LogWarnf("not found block [%s]", operation.ParentID) util.ReloadUI() // 比如分屏后编辑器状态不一致,这里强制重新载入界面 return } @@ -779,7 +779,7 @@ func (tx *Transaction) doInsert(operation *Operation) (ret *TxErr) { } } if nil == block { - logging.LogErrorf("not found block [%s, %s, %s]", operation.ParentID, operation.PreviousID, operation.NextID) + logging.LogWarnf("not found block [%s, %s, %s]", operation.ParentID, operation.PreviousID, operation.NextID) util.ReloadUI() // 比如分屏后编辑器状态不一致,这里强制重新载入界面 return } @@ -925,10 +925,10 @@ func (tx *Transaction) doInsert(operation *Operation) (ret *TxErr) { func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { id := operation.ID - tree, err := tx.loadTree(id) if nil != err { if errors.Is(err, ErrBlockNotFound) { + logging.LogWarnf("not found block [%s]", id) return }