From c819b63fa725d899cd5bfe128a5e383fb42976c5 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 19 Jul 2022 21:40:16 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E5=AF=BC=E5=87=BA=20PDF=20=E5=92=8C=20?= =?UTF-8?q?Word=20=E6=97=B6=E6=94=AF=E6=8C=81=E8=A6=86=E7=9B=96=E5=B7=B2?= =?UTF-8?q?=E6=9C=89=E6=96=87=E4=BB=B6=20https://github.com/siyuan-note/si?= =?UTF-8?q?yuan/issues/5309?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/protyle/export/index.ts | 24 +++++++++++++++++++++++- kernel/model/export.go | 15 +++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/src/protyle/export/index.ts b/app/src/protyle/export/index.ts index 40a277575..6326549a3 100644 --- a/app/src/protyle/export/index.ts +++ b/app/src/protyle/export/index.ts @@ -121,8 +121,30 @@ const getExportPath = (option: { type: string, id: string }, pdfOption?: PrintTo lockFile(response.data); return; } + + let exportType = "HTML (SiYuan)" + let extension = "html" + switch (option.type) { + case "htmlmd": + exportType = "HTML (Markdown)"; + break; + case "word": + exportType = "Word .docx"; + extension = "docx"; + break; + case "pdf": + exportType = "PDF"; + extension = "pdf"; + break; + } + dialog.showSaveDialog({ - defaultPath: response.data.rootTitle, + title: window.siyuan.languages.export + " " + exportType, + defaultPath: response.data.rootTitle + "." + extension, + filters: [{ + name: "Word", + extensions: [extension] + }], properties: ["showOverwriteConfirmation"], }).then((result: SaveDialogReturnValue) => { if (!result.canceled) { diff --git a/kernel/model/export.go b/kernel/model/export.go index a70a2d572..cda63d226 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -180,13 +180,17 @@ func ExportDocx(id, savePath string) (err error) { return errors.New(msg) } - if err = gulu.File.Copy(tmpDocxPath, filepath.Join(savePath, name+".docx")); nil != err { + if 1 < strings.Count(savePath, filepath.Base(savePath)) { + savePath = filepath.Dir(savePath) + } + + if err = gulu.File.Copy(tmpDocxPath, savePath); nil != err { logging.LogErrorf("export docx failed: %s", err) return errors.New(fmt.Sprintf(Conf.Language(14), err)) } tmpAssets := filepath.Join(tmpDir, "assets") if gulu.File.IsDir(tmpAssets) { - if err = gulu.File.Copy(tmpAssets, filepath.Join(savePath, "assets")); nil != err { + if err = gulu.File.Copy(tmpAssets, filepath.Join(filepath.Dir(savePath), "assets")); nil != err { logging.LogErrorf("export docx failed: %s", err) return errors.New(fmt.Sprintf(Conf.Language(14), err)) } @@ -199,6 +203,9 @@ func ExportMarkdownHTML(id, savePath string, docx bool) (name, dom string) { tree = exportTree(tree, true) name = path.Base(tree.HPath) + if 1 < strings.Count(savePath, filepath.Base(savePath)) { + savePath = filepath.Dir(savePath) + } if err := os.MkdirAll(savePath, 0755); nil != err { logging.LogErrorf("mkdir [%s] failed: %s", savePath, err) @@ -283,6 +290,10 @@ func ExportHTML(id, savePath string, pdf bool) (name, dom string) { tree = exportTree(tree, true) name = path.Base(tree.Path) + if 1 < strings.Count(savePath, filepath.Base(savePath)) { + savePath = filepath.Dir(savePath) + } + if err := os.MkdirAll(savePath, 0755); nil != err { logging.LogErrorf("mkdir [%s] failed: %s", savePath, err) return