summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--electron/package.json15
-rw-r--r--electron/src/index.js21
-rw-r--r--lib/extensions/print_pdf.py12
-rw-r--r--lib/gui/electron.py22
-rw-r--r--print/resources/inkstitch.js11
5 files changed, 41 insertions, 40 deletions
diff --git a/electron/package.json b/electron/package.json
index 1306eb68..c902b205 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 398a9580..90aaea63 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 . <url>`
+ 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 4d8ffbd4..0cbce479 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/<field_name>', 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 ced3ad66..f1bdeb61 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")
- 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])
+ 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:
- 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 c58aed8a..32a9a207 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(){