kopia lustrzana https://github.com/inkstitch/inkstitch
112 wiersze
3.4 KiB
JavaScript
112 wiersze
3.4 KiB
JavaScript
/*
|
|
* Authors: see git history
|
|
*
|
|
* Copyright (c) 2010 Authors
|
|
* Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
|
|
*
|
|
*/
|
|
|
|
'use strict'
|
|
|
|
const path = require('path')
|
|
const fs = require('fs')
|
|
const tmp = require('tmp')
|
|
const url = require('url')
|
|
const { app, BrowserWindow, ipcMain, dialog, shell, Menu} = require('electron')
|
|
// url for printPDF flask server which is used in development and production mode
|
|
|
|
var port = process.env.FLASKPORT
|
|
const printPdfUrl = `http://127.0.0.1:${port}/`
|
|
|
|
const isDev = process.env.BABEL_ENV === 'development'
|
|
|
|
var target = null
|
|
// Finds this url in the argv array and sets to target value
|
|
if (process.argv.includes(printPdfUrl)) {
|
|
target = printPdfUrl
|
|
} else {
|
|
target = process.argv[1] || "";
|
|
}
|
|
var targetURL = url.parse(target)
|
|
var winURL = null
|
|
|
|
// Eventually this will be migrated to Vue.
|
|
if (targetURL.protocol) {
|
|
winURL = target
|
|
} else {
|
|
winURL = `file://${__dirname}/index.html?${targetURL.query || ""}#${targetURL.pathname || ""}`
|
|
}
|
|
|
|
function createWindow() {
|
|
const mainWindow = new BrowserWindow({
|
|
useContentSize: true,
|
|
webPreferences: {
|
|
preload: path.join(__dirname, 'preload.js'),
|
|
nodeIntegration: false,
|
|
contextIsolation: true,
|
|
},
|
|
})
|
|
if (isDev) {
|
|
// printPDF in development mode will have dev tools activated
|
|
// Vuejs parts of Ink/Stich will not and dev tools must be accessed though the menu of electron window
|
|
mainWindow.loadURL(winURL)
|
|
mainWindow.webContents.openDevTools()
|
|
} else {
|
|
mainWindow.loadURL(winURL)
|
|
}
|
|
// This will remove the menu from the release, in dev mode the menu is available.
|
|
if(process.platform === "darwin" && !isDev) {
|
|
Menu.setApplicationMenu(Menu.buildFromTemplate([]));
|
|
} if(process.platform === "win32" || process.platform === "linux" && !isDev) {
|
|
mainWindow.removeMenu();
|
|
}
|
|
mainWindow.maximize()
|
|
// save to PDF
|
|
ipcMain.on('save-pdf', (event, pageSize) => {
|
|
const webContents = event.sender
|
|
const win = BrowserWindow.fromWebContents(webContents)
|
|
const saveOpt = {
|
|
title: "Save PDF",
|
|
defaultPath: "Inkstitch.pdf",
|
|
bookmark: "true",
|
|
}
|
|
win.webContents.printToPDF({}).then(pageSize => {
|
|
dialog.showSaveDialog(saveOpt).then(filename => {
|
|
const { filePath } = filename;
|
|
fs.writeFileSync(filePath, pageSize, (error) => {
|
|
if (error) {
|
|
throw error
|
|
}
|
|
console.log(`Wrote PDF successfully to ${pdfPath}`)
|
|
})
|
|
}).catch(error => {
|
|
console.log(`Failed to write PDF to ${pdfPath}: `, error)
|
|
})
|
|
})
|
|
})
|
|
// openPDF
|
|
ipcMain.on('open-pdf', (event, pageSize) => {
|
|
const webContents = event.sender
|
|
const win = BrowserWindow.fromWebContents(webContents)
|
|
win.webContents.printToPDF({}).then(pageSize => {
|
|
tmp.file({keep: true, discardDescriptor: true}, function(err, path, fd, cleanupCallback) {
|
|
fs.writeFileSync(path, pageSize, 'utf-8');
|
|
shell.openPath(path);
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
app.whenReady().then(() => {
|
|
createWindow()
|
|
app.on('activate', () => {
|
|
if(BrowserWindow.getAllWindows().length === 0) {
|
|
createWindow()
|
|
}
|
|
})
|
|
})
|
|
|
|
app.on('window-all-closed', () => {
|
|
app.quit()
|
|
})
|