From a74266bf6bb76dbe12b97c1388bbcd7f38f241d7 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 26 Sep 2024 16:16:30 +0800 Subject: [PATCH 1/3] :bug: The compressed package exported from the cloud configuration cannot be imported after being renamed https://github.com/siyuan-note/siyuan/issues/11491 --- kernel/api/sync.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/kernel/api/sync.go b/kernel/api/sync.go index 847165f25..d32401b90 100644 --- a/kernel/api/sync.go +++ b/kernel/api/sync.go @@ -70,15 +70,15 @@ func importSyncProviderWebDAV(c *gin.Context) { return } - tmpDir := filepath.Join(util.TempDir, "import") - if err = os.MkdirAll(tmpDir, 0755); err != nil { + importDir := filepath.Join(util.TempDir, "import") + if err = os.MkdirAll(importDir, 0755); err != nil { logging.LogErrorf("import WebDAV provider failed: %s", err) ret.Code = -1 ret.Msg = err.Error() return } - tmp := filepath.Join(tmpDir, f.Filename) + tmp := filepath.Join(importDir, f.Filename) if err = os.WriteFile(tmp, data, 0644); err != nil { logging.LogErrorf("import WebDAV provider failed: %s", err) ret.Code = -1 @@ -86,6 +86,7 @@ func importSyncProviderWebDAV(c *gin.Context) { return } + tmpDir := filepath.Join(importDir, "webdav") if err = gulu.Zip.Unzip(tmp, tmpDir); err != nil { logging.LogErrorf("import WebDAV provider failed: %s", err) ret.Code = -1 @@ -93,7 +94,22 @@ func importSyncProviderWebDAV(c *gin.Context) { return } - tmp = filepath.Join(tmpDir, f.Filename[:len(f.Filename)-4]) + entries, err := os.ReadDir(tmpDir) + if err != nil { + logging.LogErrorf("import WebDAV provider failed: %s", err) + ret.Code = -1 + ret.Msg = err.Error() + return + } + + if 1 != len(entries) { + logging.LogErrorf("invalid WebDAV provider package") + ret.Code = -1 + ret.Msg = "invalid WebDAV provider package" + return + } + + tmp = filepath.Join(tmpDir, entries[0].Name()) data, err = os.ReadFile(tmp) if err != nil { logging.LogErrorf("import WebDAV provider failed: %s", err) From 694303e5e8d0773411fe188944c0b0aafe57b5c0 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 26 Sep 2024 16:16:45 +0800 Subject: [PATCH 2/3] :art: Support export and import settings https://github.com/siyuan-note/siyuan/issues/10617 --- kernel/api/system.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/kernel/api/system.go b/kernel/api/system.go index f9a04ffc0..d51f980b9 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -346,15 +346,15 @@ func importConf(c *gin.Context) { return } - tmpDir := filepath.Join(util.TempDir, "import") - if err = os.MkdirAll(tmpDir, 0755); err != nil { + importDir := filepath.Join(util.TempDir, "import") + if err = os.MkdirAll(importDir, 0755); err != nil { logging.LogErrorf("import conf failed: %s", err) ret.Code = -1 ret.Msg = err.Error() return } - tmp := filepath.Join(tmpDir, f.Filename) + tmp := filepath.Join(importDir, f.Filename) if err = os.WriteFile(tmp, data, 0644); err != nil { logging.LogErrorf("import conf failed: %s", err) ret.Code = -1 @@ -362,6 +362,7 @@ func importConf(c *gin.Context) { return } + tmpDir := filepath.Join(importDir, "conf") if err = gulu.Zip.Unzip(tmp, tmpDir); err != nil { logging.LogErrorf("import conf failed: %s", err) ret.Code = -1 @@ -369,7 +370,22 @@ func importConf(c *gin.Context) { return } - tmp = filepath.Join(tmpDir, f.Filename[:len(f.Filename)-4]) + entries, err := os.ReadDir(tmpDir) + if err != nil { + logging.LogErrorf("import conf failed: %s", err) + ret.Code = -1 + ret.Msg = err.Error() + return + } + + if 1 != len(entries) { + logging.LogErrorf("invalid conf package") + ret.Code = -1 + ret.Msg = "invalid conf package" + return + } + + tmp = filepath.Join(tmpDir, entries[0].Name()) data, err = os.ReadFile(tmp) if err != nil { logging.LogErrorf("import conf failed: %s", err) From 77eb65087c9b89d9414222b1ce839b63abf2e468 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 26 Sep 2024 16:27:48 +0800 Subject: [PATCH 3/3] :art: Support export and import settings https://github.com/siyuan-note/siyuan/issues/10617 --- app/src/config/exportConfig.ts | 15 ++++++++++++++- kernel/api/system.go | 1 - 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/config/exportConfig.ts b/app/src/config/exportConfig.ts index 7a749ff1b..2ec13bb22 100644 --- a/app/src/config/exportConfig.ts +++ b/app/src/config/exportConfig.ts @@ -9,6 +9,8 @@ import {showMessage} from "../dialog/message"; import {showFileInFolder} from "../util/pathName"; import {Constants} from "../constants"; import {openByMobile} from "../protyle/util/compatibility"; +import {exportLayout} from "../layout/util"; +import {exitSiYuan} from "../dialog/processSystem"; export const exportConfig = { element: undefined as Element, @@ -234,7 +236,18 @@ export const exportConfig = { item.addEventListener("change", (event: InputEvent & { target: HTMLInputElement }) => { const formData = new FormData(); formData.append("file", event.target.files[0]); - fetchPost("/api/system/importConf", formData); + fetchPost("/api/system/importConf", formData, response => { + if (response.code !== 0) { + showMessage(response.msg); + return + } + + showMessage(window.siyuan.languages.imported); + exportLayout({ + errorExit: true, + cb: exitSiYuan + }); + }); }); } else { item.addEventListener("change", () => { diff --git a/kernel/api/system.go b/kernel/api/system.go index d51f980b9..c13608557 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -410,7 +410,6 @@ func importConf(c *gin.Context) { } logging.LogInfof("imported conf") - model.Close(false, true, 1) } func getConf(c *gin.Context) {