diff --git a/electron/package.json b/electron/package.json index 1306eb68b..c902b2052 100644 --- a/electron/package.json +++ b/electron/package.json @@ -6,12 +6,19 @@ "main": "src/index.js", "scripts": { "pack": "electron-builder --dir", - "dist": "electron-builder" + "dist": "electron-builder", + "dev": "electron ." }, "build": { - "linux": { "target": "dir" }, - "win": { "target": "dir" }, - "mac": { "target": "dir" } + "linux": { + "target": "dir" + }, + "win": { + "target": "dir" + }, + "mac": { + "target": "dir" + } }, "keywords": [], "author": "lex", diff --git a/electron/src/index.js b/electron/src/index.js index 398a95807..90aaea639 100644 --- a/electron/src/index.js +++ b/electron/src/index.js @@ -1,4 +1,5 @@ -import { app, BrowserWindow } from 'electron'; +import { app, BrowserWindow, ipcMain, dialog } from 'electron'; +var fs = require('fs'); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. @@ -11,8 +12,16 @@ const createWindow = () => { mainWindow.maximize(); // and load the index.html of the app. - mainWindow.loadURL(process.argv[1]); + if (process.argv[1] == ".") { + // run in development mode with `electron . ` + var url = process.argv[2]; + } else { + var url = process.argv[1]; + } + mainWindow.loadURL(url); + mainWindow.webContents.openDevTools(); + // Emitted when the window is closed. mainWindow.on('closed', () => { // Dereference the window object, usually you would store windows @@ -31,3 +40,11 @@ app.on('ready', createWindow); app.on('window-all-closed', () => { app.quit(); }); + +ipcMain.on('print', function (event, pageSize) { + mainWindow.webContents.printToPDF({"pageSize": pageSize}, function(error, data) { + dialog.showSaveDialog(mainWindow, {"defaultPath": "inkstitch.pdf"}, function(filename, bookmark) { + fs.writeFileSync(filename, data, 'utf-8'); + }) + }) +}) \ No newline at end of file diff --git a/lib/extensions/print_pdf.py b/lib/extensions/print_pdf.py index 4d8ffbd4d..0cbce4794 100644 --- a/lib/extensions/print_pdf.py +++ b/lib/extensions/print_pdf.py @@ -88,18 +88,6 @@ class PrintPreviewServer(Thread): def resources(resource): return send_from_directory(self.resources_path, resource, cache_timeout=1) - @self.app.route('/printing/start') - def printing_start(): - # temporarily turn off the watcher while the print dialog is up, - # because javascript will be frozen - self.last_request_time = None - return "OK" - - @self.app.route('/printing/end') - def printing_end(): - # nothing to do here -- request_started() will restart the watcher - return "OK" - @self.app.route('/settings/', methods=['POST']) def set_field(field_name): self.metadata[field_name] = request.json['value'] diff --git a/lib/gui/electron.py b/lib/gui/electron.py index ced3ad668..f1bdeb615 100644 --- a/lib/gui/electron.py +++ b/lib/gui/electron.py @@ -1,4 +1,3 @@ -from glob import glob import os import subprocess import sys @@ -14,21 +13,14 @@ def open_url(url): if getattr(sys, 'frozen', None) is not None: electron_path = os.path.join(get_bundled_dir("electron"), "inkstitch-gui") + + if sys.platform == "darwin": + electron_path += ".app/Contents/MacOS/inkstitch-gui" + subprocess.Popen(["open", "-a", electron_path, "--args", url]) + else: + app_process = subprocess.Popen([electron_path, url]) else: - # It's a bit trickier to find the electron app in a development environment. - base_dir = get_bundled_dir("electron") - - try: - package_dir = glob(os.path.join(base_dir, 'dist', '*-unpacked'))[0] - except IndexError: - raise Exception("Electron app not found. Be sure to run 'yarn; yarn dist' in %s." % base_dir) - - electron_path = os.path.join(base_dir, package_dir, "inkstitch-gui") - - if sys.platform == "darwin": - electron_path += ".app/Contents/MacOS/inkstitch-gui" - app_process = subprocess.Popen(["open", "-a", electron_path, "--args", url]) - else: - app_process = subprocess.Popen([electron_path, url]) + # if we're not running in a pyinstaller bundle, run electron directly + app_process = subprocess.Popen(["yarn", "dev", url], cwd=get_bundled_dir("electron")) return app_process diff --git a/print/resources/inkstitch.js b/print/resources/inkstitch.js index c58aed8a0..32a9a207b 100644 --- a/print/resources/inkstitch.js +++ b/print/resources/inkstitch.js @@ -1,3 +1,5 @@ +var electron = require('electron'); + $.postJSON = function(url, data, success=null) { return $.ajax(url, { type: 'POST', @@ -366,13 +368,8 @@ $(function() { }); $('button.print').click(function() { - // printing halts all javascript activity, so we need to tell the backend - // not to shut down until we're done. - $.get("/printing/start") - .done(function() { - window.print(); - $.get("/printing/end"); - }); + var pageSize = $('select#printing-size').find(':selected').text(); + electron.ipcRenderer.send('print', pageSize) }); $('button.settings').click(function(){