diff --git a/app/src/protyle/export/index.ts b/app/src/protyle/export/index.ts index 5c804479b..f652bb656 100644 --- a/app/src/protyle/export/index.ts +++ b/app/src/protyle/export/index.ts @@ -1,7 +1,7 @@ import {showMessage} from "../../dialog/message"; import {Constants} from "../../constants"; /// #if !BROWSER -import {PrintToPDFOptions, SaveDialogReturnValue} from "electron"; +import {PrintToPDFOptions, OpenDialogReturnValue} from "electron"; import {BrowserWindow, dialog} from "@electron/remote"; import * as fs from "fs"; import * as path from "path"; @@ -138,15 +138,10 @@ const getExportPath = (option: { type: string, id: string }, pdfOption?: PrintTo break; } - dialog.showSaveDialog({ + dialog.showOpenDialog({ title: window.siyuan.languages.export + " " + exportType, - defaultPath: response.data.rootTitle + "." + extension, - filters: [{ - name: exportType, - extensions: [extension] - }], - properties: ["showOverwriteConfirmation"], - }).then((result: SaveDialogReturnValue) => { + properties: ["createDirectory", "openDirectory"], + }).then((result: OpenDialogReturnValue) => { if (!result.canceled) { const msgId = showMessage(window.siyuan.languages.exporting, -1); let url = "/api/export/exportHTML"; @@ -158,12 +153,12 @@ const getExportPath = (option: { type: string, id: string }, pdfOption?: PrintTo fetchPost(url, { id: option.id, pdf: option.type === "pdf", - savePath: result.filePath + savePath: result.filePaths[0] }, exportResponse => { if (option.type === "word") { - afterExport(result.filePath, msgId); + afterExport(result.filePaths[0], msgId); } else { - onExport(exportResponse, result.filePath, option.type, pdfOption, removeAssets, msgId); + onExport(exportResponse, result.filePaths[0], option.type, pdfOption, removeAssets, msgId); } }); } diff --git a/kernel/model/export.go b/kernel/model/export.go index cda63d226..a70a2d572 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -180,17 +180,13 @@ func ExportDocx(id, savePath string) (err error) { return errors.New(msg) } - if 1 < strings.Count(savePath, filepath.Base(savePath)) { - savePath = filepath.Dir(savePath) - } - - if err = gulu.File.Copy(tmpDocxPath, savePath); nil != err { + if err = gulu.File.Copy(tmpDocxPath, filepath.Join(savePath, name+".docx")); 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(filepath.Dir(savePath), "assets")); nil != err { + if err = gulu.File.Copy(tmpAssets, filepath.Join(savePath, "assets")); nil != err { logging.LogErrorf("export docx failed: %s", err) return errors.New(fmt.Sprintf(Conf.Language(14), err)) } @@ -203,9 +199,6 @@ 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) @@ -290,10 +283,6 @@ 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