mirror of
https://github.com/siyuan-note/siyuan
synced 2026-04-21 13:37:52 +00:00
Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
parent
28e6305261
commit
48456518ff
2 changed files with 20 additions and 12 deletions
|
|
@ -113,7 +113,7 @@ func batchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) (ret []*parse
|
|||
return
|
||||
}
|
||||
|
||||
func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err error) {
|
||||
func LoadTreeWithFix(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, needFix bool, err error) {
|
||||
rootID := util.GetTreeID(p)
|
||||
if raw, ok := cache.GetTreeData(rootID); ok {
|
||||
ret, err = LoadTreeByData(raw, boxID, p, luteEngine)
|
||||
|
|
@ -127,7 +127,7 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro
|
|||
return
|
||||
}
|
||||
|
||||
data, err = fixTreeJSONData(boxID, p, data, luteEngine)
|
||||
data, needFix, err = fixTreeJSONData(boxID, p, data, luteEngine)
|
||||
if nil != err {
|
||||
return
|
||||
}
|
||||
|
|
@ -139,6 +139,11 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro
|
|||
return
|
||||
}
|
||||
|
||||
func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err error) {
|
||||
ret, _, err = LoadTreeWithFix(boxID, p, luteEngine)
|
||||
return
|
||||
}
|
||||
|
||||
func LoadTreeByData(data []byte, boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err error) {
|
||||
ret, err = parseJSON2Tree(boxID, p, data, luteEngine)
|
||||
if nil != err {
|
||||
|
|
@ -386,20 +391,19 @@ func afterWriteTree(tree *parse.Tree) {
|
|||
}
|
||||
|
||||
// fixTreeJSONData 订正树 JSON 数据。
|
||||
func fixTreeJSONData(boxID, p string, jsonData []byte, luteEngine *lute.Lute) ([]byte, error) {
|
||||
func fixTreeJSONData(boxID, p string, jsonData []byte, luteEngine *lute.Lute) (data []byte, needFix bool, err error) {
|
||||
jsonData = removeUnescapedUnicodeNull(jsonData)
|
||||
var needFix bool
|
||||
ret, needFix, err := dataparser.ParseJSON(jsonData, luteEngine.ParseOptions)
|
||||
if err != nil {
|
||||
logging.LogErrorf("parse json [%s] to tree failed: %s", boxID+p, err)
|
||||
return nil, err
|
||||
return
|
||||
}
|
||||
|
||||
ret.Box = boxID
|
||||
ret.Path = p
|
||||
|
||||
if err = treenode.CheckSpec(ret); errors.Is(err, treenode.ErrSpecTooNew) {
|
||||
return nil, err
|
||||
return
|
||||
}
|
||||
|
||||
if treenode.UpgradeSpec(ret) {
|
||||
|
|
@ -422,29 +426,29 @@ func fixTreeJSONData(boxID, p string, jsonData []byte, luteEngine *lute.Lute) ([
|
|||
}
|
||||
|
||||
if !needFix {
|
||||
return jsonData, nil
|
||||
return jsonData, false, nil
|
||||
}
|
||||
|
||||
renderer := render.NewJSONRenderer(ret, luteEngine.RenderOptions, luteEngine.ParseOptions)
|
||||
data := renderer.Render()
|
||||
data = renderer.Render()
|
||||
|
||||
if !util.UseSingleLineSave {
|
||||
buf := bytes.Buffer{}
|
||||
buf.Grow(1024 * 1024 * 2)
|
||||
if err = json.Indent(&buf, data, "", "\t"); err != nil {
|
||||
return nil, err
|
||||
return
|
||||
}
|
||||
data = buf.Bytes()
|
||||
}
|
||||
|
||||
filePath := filepath.Join(util.DataDir, ret.Box, ret.Path)
|
||||
if err = os.MkdirAll(filepath.Dir(filePath), 0755); err != nil {
|
||||
return nil, err
|
||||
return
|
||||
}
|
||||
if err = filelock.WriteFile(filePath, data); err != nil {
|
||||
logging.LogErrorf("write data [%s] failed: %s", filePath, err)
|
||||
}
|
||||
return data, nil
|
||||
return
|
||||
}
|
||||
|
||||
func parseJSON2Tree(boxID, p string, jsonData []byte, luteEngine *lute.Lute) (ret *parse.Tree, err error) {
|
||||
|
|
|
|||
|
|
@ -243,7 +243,11 @@ func LoadTreeByBlockID(id string) (ret *parse.Tree, err error) {
|
|||
|
||||
func loadTreeByBlockTree(bt *treenode.BlockTree) (ret *parse.Tree, err error) {
|
||||
luteEngine := util.NewLute()
|
||||
ret, err = filesys.LoadTree(bt.BoxID, bt.Path, luteEngine)
|
||||
ret, needFix, err := filesys.LoadTreeWithFix(bt.BoxID, bt.Path, luteEngine)
|
||||
if needFix {
|
||||
treenode.UpsertBlockTree(ret)
|
||||
sql.IndexTreeQueue(ret)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue