From c1e0b4ff60c82ec8028b40a53bf579b02cfd150c Mon Sep 17 00:00:00 2001 From: Vanessa Date: Sun, 8 Oct 2023 12:08:11 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/9368 --- app/electron/main.js | 22 +++-- app/src/boot/onGetConfig.ts | 159 +++++++++++++++----------------- app/src/protyle/export/index.ts | 5 +- 3 files changed, 91 insertions(+), 95 deletions(-) diff --git a/app/electron/main.js b/app/electron/main.js index 9976f2073..16be4da4e 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -15,7 +15,7 @@ // along with this program. If not, see . const { - net, app, BrowserWindow, shell, Menu, screen, ipcMain, globalShortcut, Tray, + net, app, BrowserWindow, shell, Menu, screen, ipcMain, globalShortcut, Tray, dialog } = require("electron"); const path = require("path"); const fs = require("fs"); @@ -390,7 +390,7 @@ const boot = () => { event.preventDefault(); }); workspaces.push({ - browserWindow: currentWindow, id: currentWindow.id, + browserWindow: currentWindow, }); }; @@ -667,7 +667,7 @@ app.whenReady().then(() => { }); ipcMain.on("siyuan-config-tray", (event, data) => { workspaces.find(item => { - if (item.id === data.id) { + if (item.browserWindow.webContents.id === event.sender.id) { hideWindow(item.browserWindow); if ("win32" === process.platform || "linux" === process.platform) { resetTrayMenu(item.tray, data.languages, item.browserWindow); @@ -677,10 +677,20 @@ app.whenReady().then(() => { }); }); ipcMain.on("siyuan-export-pdf", (event, data) => { - BrowserWindow.fromId(data.id).webContents.send("siyuan-export-pdf", data); + dialog.showOpenDialog({ + title: data.title, + properties: ["createDirectory", "openDirectory"], + }).then((result) => { + if (result.canceled) { + event.sender.destroy(); + return; + } + data.filePaths = result.filePaths; + BrowserWindow.fromId(BrowserWindow.getAllWindows().find((win) => win.webContents.id === event.sender.id).id).getParentWindow().send("siyuan-export-pdf", data); + }); }); - ipcMain.on("siyuan-export-close", (event, id) => { - BrowserWindow.fromId(id).webContents.send("siyuan-export-close", id); + ipcMain.on("siyuan-export-close", (event) => { + event.sender.destroy(); }); ipcMain.on("siyuan-export-prevent", (event, id) => { BrowserWindow.fromId(id).webContents.on("will-navigate", (event) => { diff --git a/app/src/boot/onGetConfig.ts b/app/src/boot/onGetConfig.ts index 76b17bafa..46c150881 100644 --- a/app/src/boot/onGetConfig.ts +++ b/app/src/boot/onGetConfig.ts @@ -188,7 +188,6 @@ export const initWindow = (app: App) => { // 最小化 if ("windows" === window.siyuan.config.system.os) { ipcRenderer.send(Constants.SIYUAN_CONFIG_TRAY, { - id: getCurrentWindow().id, languages: window.siyuan.languages["_trayMenu"], }); } else { @@ -308,9 +307,6 @@ export const initWindow = (app: App) => { ipcRenderer.on(Constants.SIYUAN_SEND_WINDOWS, (e, ipcData: IWebSocketData) => { onWindowsMsg(ipcData); }); - ipcRenderer.on(Constants.SIYUAN_EXPORT_CLOSE, () => { - window.siyuan.printWin.destroy(); - }); ipcRenderer.on(Constants.SIYUAN_HOTKEY, (e, data) => { let matchCommand = false; app.plugins.find(item => { @@ -326,91 +322,82 @@ export const initWindow = (app: App) => { } }); }); - ipcRenderer.on(Constants.SIYUAN_EXPORT_PDF, (e, ipcData) => { - dialog.showOpenDialog({ - title: window.siyuan.languages.export + " PDF", - properties: ["createDirectory", "openDirectory"], - }).then(async (result: OpenDialogReturnValue) => { - if (result.canceled) { - window.siyuan.printWin.destroy(); - return; - } - const msgId = showMessage(window.siyuan.languages.exporting, -1); - window.siyuan.storage[Constants.LOCAL_EXPORTPDF] = { - removeAssets: ipcData.removeAssets, - keepFold: ipcData.keepFold, - mergeSubdocs: ipcData.mergeSubdocs, - landscape: ipcData.pdfOptions.landscape, - marginType: ipcData.pdfOptions.marginType, - pageSize: ipcData.pdfOptions.pageSize, - scale: ipcData.pdfOptions.scale, - marginTop: ipcData.pdfOptions.margins.top, - marginRight: ipcData.pdfOptions.margins.right, - marginBottom: ipcData.pdfOptions.margins.bottom, - marginLeft: ipcData.pdfOptions.margins.left, - }; - setStorageVal(Constants.LOCAL_EXPORTPDF, window.siyuan.storage[Constants.LOCAL_EXPORTPDF]); - try { - if (window.siyuan.config.export.pdfFooter.trim()) { - const response = await fetchSyncPost("/api/template/renderSprig", {template: window.siyuan.config.export.pdfFooter}); - ipcData.pdfOptions.displayHeaderFooter = true; - ipcData.pdfOptions.headerTemplate = ""; - ipcData.pdfOptions.footerTemplate = `
+ ipcRenderer.on(Constants.SIYUAN_EXPORT_PDF, async (e, ipcData) => { + const msgId = showMessage(window.siyuan.languages.exporting, -1); + window.siyuan.storage[Constants.LOCAL_EXPORTPDF] = { + removeAssets: ipcData.removeAssets, + keepFold: ipcData.keepFold, + mergeSubdocs: ipcData.mergeSubdocs, + landscape: ipcData.pdfOptions.landscape, + marginType: ipcData.pdfOptions.marginType, + pageSize: ipcData.pdfOptions.pageSize, + scale: ipcData.pdfOptions.scale, + marginTop: ipcData.pdfOptions.margins.top, + marginRight: ipcData.pdfOptions.margins.right, + marginBottom: ipcData.pdfOptions.margins.bottom, + marginLeft: ipcData.pdfOptions.margins.left, + }; + setStorageVal(Constants.LOCAL_EXPORTPDF, window.siyuan.storage[Constants.LOCAL_EXPORTPDF]); + try { + if (window.siyuan.config.export.pdfFooter.trim()) { + const response = await fetchSyncPost("/api/template/renderSprig", {template: window.siyuan.config.export.pdfFooter}); + ipcData.pdfOptions.displayHeaderFooter = true; + ipcData.pdfOptions.headerTemplate = ""; + ipcData.pdfOptions.footerTemplate = `
${response.data.replace("%pages", "").replace("%page", "")}
`; - } - window.siyuan.printWin.webContents.printToPDF(ipcData.pdfOptions).then((pdfData) => { - fetchPost("/api/export/exportHTML", { - id: ipcData.rootId, - pdf: true, - removeAssets: ipcData.removeAssets, - merge: ipcData.mergeSubdocs, - savePath: result.filePaths[0] - }, () => { - const pdfFilePath = path.join(result.filePaths[0], replaceLocalPath(ipcData.rootTitle) + ".pdf"); - fs.writeFileSync(pdfFilePath, pdfData); - window.siyuan.printWin.destroy(); - fetchPost("/api/export/processPDF", { - id: ipcData.rootId, - merge: ipcData.mergeSubdocs, - path: pdfFilePath, - removeAssets: ipcData.removeAssets, - }, () => { - afterExport(pdfFilePath, msgId); - if (ipcData.removeAssets) { - const removePromise = (dir: string) => { - return new Promise(function (resolve) { - //先读文件夹 - fs.stat(dir, function (err, stat) { - if (stat) { - if (stat.isDirectory()) { - fs.readdir(dir, function (err, files) { - files = files.map(file => path.join(dir, file)); // a/b a/m - Promise.all(files.map(file => removePromise(file))).then(function () { - fs.rmdir(dir, resolve); - }); - }); - } else { - fs.unlink(dir, resolve); - } - } - }); - }); - }; - removePromise(path.join(result.filePaths[0], "assets")); - } - }); - }); - }).catch((error: string) => { - showMessage("Export PDF error:" + error, 0, "error", msgId); - window.siyuan.printWin.destroy(); - }); - } catch (e) { - showMessage("Export PDF failed: " + e, 0, "error", msgId); - window.siyuan.printWin.destroy(); } - window.siyuan.printWin.hide(); - }); + window.siyuan.printWin.webContents.printToPDF(ipcData.pdfOptions).then((pdfData) => { + fetchPost("/api/export/exportHTML", { + id: ipcData.rootId, + pdf: true, + removeAssets: ipcData.removeAssets, + merge: ipcData.mergeSubdocs, + savePath: ipcData.filePaths[0] + }, () => { + const pdfFilePath = path.join(ipcData.filePaths[0], replaceLocalPath(ipcData.rootTitle) + ".pdf"); + fs.writeFileSync(pdfFilePath, pdfData); + window.siyuan.printWin.destroy(); + fetchPost("/api/export/processPDF", { + id: ipcData.rootId, + merge: ipcData.mergeSubdocs, + path: pdfFilePath, + removeAssets: ipcData.removeAssets, + }, () => { + afterExport(pdfFilePath, msgId); + if (ipcData.removeAssets) { + const removePromise = (dir: string) => { + return new Promise(function (resolve) { + //先读文件夹 + fs.stat(dir, function (err, stat) { + if (stat) { + if (stat.isDirectory()) { + fs.readdir(dir, function (err, files) { + files = files.map(file => path.join(dir, file)); // a/b a/m + Promise.all(files.map(file => removePromise(file))).then(function () { + fs.rmdir(dir, resolve); + }); + }); + } else { + fs.unlink(dir, resolve); + } + } + }); + }); + }; + removePromise(path.join(ipcData.filePaths[0], "assets")); + } + }); + }); + }).catch((error: string) => { + showMessage("Export PDF error:" + error, 0, "error", msgId); + window.siyuan.printWin.destroy(); + }); + } catch (e) { + showMessage("Export PDF failed: " + e, 0, "error", msgId); + window.siyuan.printWin.destroy(); + } + window.siyuan.printWin.hide(); }); window.addEventListener("beforeunload", () => { diff --git a/app/src/protyle/export/index.ts b/app/src/protyle/export/index.ts index 8251f9312..0089f4d4b 100644 --- a/app/src/protyle/export/index.ts +++ b/app/src/protyle/export/index.ts @@ -461,15 +461,14 @@ const renderPDF = (id: string) => { actionElement.querySelector("#landscape").addEventListener('change', () => { setPadding(); }); - const currentWindowId = ${getCurrentWindow().id}; actionElement.querySelector('.b3-button--cancel').addEventListener('click', () => { const {ipcRenderer} = require("electron"); - ipcRenderer.send("${Constants.SIYUAN_EXPORT_CLOSE}", currentWindowId) + ipcRenderer.send("${Constants.SIYUAN_EXPORT_CLOSE}") }); actionElement.querySelector('.b3-button--text').addEventListener('click', () => { const {ipcRenderer} = require("electron"); ipcRenderer.send("${Constants.SIYUAN_EXPORT_PDF}", { - id: currentWindowId, + title: "${window.siyuan.languages.export} PDF", pdfOptions:{ printBackground: true, landscape: actionElement.querySelector("#landscape").checked,