🐛 只读模式下多项折叠会导致数据类型错误 https://github.com/siyuan-note/siyuan/issues/6557
This commit is contained in:
parent
86804f1c1d
commit
6d8d730262
2 changed files with 24 additions and 11 deletions
|
@ -63,17 +63,23 @@ func performTransactions(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
if op := model.IsSetAttrs(&transactions); nil != op {
|
||||
setAttrsOps := model.ExtractSetAttrsOps(&transactions)
|
||||
for _, setAttrsOp := range setAttrsOps {
|
||||
attrs := map[string]string{}
|
||||
if err = gulu.JSON.UnmarshalJSON([]byte(op.Data.(string)), &attrs); nil != err {
|
||||
if err = gulu.JSON.UnmarshalJSON([]byte(setAttrsOp.Data.(string)), &attrs); nil != err {
|
||||
return
|
||||
}
|
||||
if err = model.SetBlockAttrs(setAttrsOp.ID, attrs); nil != err {
|
||||
if errors.Is(err, filelock.ErrUnableAccessFile) {
|
||||
ret.Code = 1
|
||||
return
|
||||
}
|
||||
logging.LogFatalf("set block attrs failed: %s", err)
|
||||
return
|
||||
}
|
||||
err = model.SetBlockAttrs(op.ID, attrs)
|
||||
} else {
|
||||
err = model.PerformTransactions(&transactions)
|
||||
}
|
||||
|
||||
if errors.Is(err, filelock.ErrUnableAccessFile) {
|
||||
if err = model.PerformTransactions(&transactions); errors.Is(err, filelock.ErrUnableAccessFile) {
|
||||
ret.Code = 1
|
||||
return
|
||||
}
|
||||
|
|
|
@ -56,13 +56,20 @@ func IsUnfoldHeading(transactions *[]*Transaction) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func IsSetAttrs(transactions *[]*Transaction) *Operation {
|
||||
if 1 == len(*transactions) && 1 == len((*transactions)[0].DoOperations) {
|
||||
if op := (*transactions)[0].DoOperations[0]; "setAttrs" == op.Action {
|
||||
return op
|
||||
func ExtractSetAttrsOps(transactions *[]*Transaction) (ret []*Operation) {
|
||||
for _, tx := range *transactions {
|
||||
var setAttrsOps, tmp []*Operation
|
||||
for _, op := range tx.DoOperations {
|
||||
if "setAttrs" == op.Action {
|
||||
setAttrsOps = append(setAttrsOps, op)
|
||||
} else {
|
||||
tmp = append(tmp, op)
|
||||
}
|
||||
}
|
||||
ret = append(ret, setAttrsOps...)
|
||||
tx.DoOperations = tmp
|
||||
}
|
||||
return nil
|
||||
return
|
||||
}
|
||||
|
||||
const txFixDelay = 10
|
||||
|
|
Loading…
Add table
Reference in a new issue