Bläddra i källkod

:art: 导出 PDF 和 Word 时支持覆盖已有文件 https://github.com/siyuan-note/siyuan/issues/5309

Liang Ding 3 år sedan
förälder
incheckning
c0d5d3ba59
2 ändrade filer med 9 tillägg och 25 borttagningar
  1. 7 12
      app/src/protyle/export/index.ts
  2. 2 13
      kernel/model/export.go

+ 7 - 12
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);
                     }
                 });
             }

+ 2 - 13
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