🐛 只读模式下多项折叠会导致数据类型错误 https://github.com/siyuan-note/siyuan/issues/6557

This commit is contained in:
Liang Ding 2022-11-11 23:44:21 +08:00
parent 86804f1c1d
commit 6d8d730262
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 24 additions and 11 deletions

View file

@ -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
}

View file

@ -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