Support for saving .sy files in the single-line format https://github.com/siyuan-note/siyuan/issues/8712

This commit is contained in:
Daniel 2023-07-09 22:24:32 +08:00
parent eb65bb4ec0
commit 9eeee3965a
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
13 changed files with 55 additions and 22 deletions

View file

@ -313,6 +313,8 @@ func setFiletree(c *gin.Context) {
model.Conf.FileTree = fileTree
model.Conf.Save()
util.UseSingleLineSave = model.Conf.FileTree.UseSingleLineSave
ret.Data = model.Conf.FileTree
}

View file

@ -30,6 +30,7 @@ type FileTree struct {
AllowCreateDeeper bool `json:"allowCreateDeeper"` // 允许创建超过 7 层深度的子文档
RemoveDocWithoutConfirm bool `json:"removeDocWithoutConfirm"` // 删除文档时是否不需要确认
CloseTabsOnStart bool `json:"closeTabsOnStart"` // 启动时关闭所有页签
UseSingleLineSave bool `json:"useSingleLineSave"` // 使用单行保存 .sy 文件
Sort int `json:"sort"` // 排序方式
}
@ -43,5 +44,6 @@ func NewFileTree() *FileTree {
MaxOpenTabCount: 8,
AllowCreateDeeper: false,
CloseTabsOnStart: false,
UseSingleLineSave: util.UseSingleLineSave,
}
}

View file

@ -165,13 +165,14 @@ func prepareWriteTree(tree *parse.Tree) (data []byte, filePath string, err error
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions)
data = renderer.Render()
// .sy 文档数据使用格式化好的 JSON 而非单行 JSON
buf := bytes.Buffer{}
buf.Grow(4096)
if err = json.Indent(&buf, data, "", "\t"); nil != err {
return
if !util.UseSingleLineSave {
buf := bytes.Buffer{}
buf.Grow(1024 * 1024 * 2)
if err = json.Indent(&buf, data, "", "\t"); nil != err {
return
}
data = buf.Bytes()
}
data = buf.Bytes()
if err = os.MkdirAll(filepath.Dir(filePath), 0755); nil != err {
return
@ -205,19 +206,21 @@ func parseJSON2Tree(boxID, p string, jsonData []byte, luteEngine *lute.Lute) (re
}
if needFix {
renderer := render.NewJSONRenderer(ret, luteEngine.RenderOptions)
output := renderer.Render()
data := renderer.Render()
buf := bytes.Buffer{}
buf.Grow(4096)
if err = json.Indent(&buf, output, "", "\t"); nil != err {
return
if !util.UseSingleLineSave {
buf := bytes.Buffer{}
buf.Grow(1024 * 1024 * 2)
if err = json.Indent(&buf, data, "", "\t"); nil != err {
return
}
data = buf.Bytes()
}
output = buf.Bytes()
if err = os.MkdirAll(filepath.Dir(filePath), 0755); nil != err {
return
}
if err = filelock.WriteFile(filePath, output); nil != err {
if err = filelock.WriteFile(filePath, data); nil != err {
msg := fmt.Sprintf("write data [%s] failed: %s", filePath, err)
logging.LogErrorf(msg)
}

View file

@ -185,6 +185,7 @@ func InitConf() {
Conf.FileTree.DocCreateSavePath = strings.TrimSuffix(Conf.FileTree.DocCreateSavePath, "/")
Conf.FileTree.DocCreateSavePath = strings.TrimSpace(Conf.FileTree.DocCreateSavePath)
}
util.UseSingleLineSave = Conf.FileTree.UseSingleLineSave
util.CurrentCloudRegion = Conf.CloudRegion

View file

@ -190,12 +190,14 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions)
data := renderer.Render()
buf := bytes.Buffer{}
buf.Grow(4096)
if err = json.Indent(&buf, data, "", "\t"); nil != err {
return
if !util.UseSingleLineSave {
buf := bytes.Buffer{}
buf.Grow(1024 * 1024 * 2)
if err = json.Indent(&buf, data, "", "\t"); nil != err {
return
}
data = buf.Bytes()
}
data = buf.Bytes()
if err = os.WriteFile(syPath, data, 0644); nil != err {
logging.LogErrorf("write .sy [%s] failed: %s", syPath, err)

View file

@ -38,6 +38,9 @@ import (
"github.com/siyuan-note/logging"
)
// UseSingleLineSave 是否使用单行保存 .sy 文件。
var UseSingleLineSave = true
// IsUILoaded 是否已经加载了 UI。
var IsUILoaded = false