aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.babelrc2
-rw-r--r--package-lock.json126
-rw-r--r--package.json2
-rw-r--r--src/index.js80
-rw-r--r--src/models/Service.js13
-rw-r--r--src/stores/ServicesStore.js17
-rw-r--r--src/webview/recipe.js17
7 files changed, 151 insertions, 106 deletions
diff --git a/.babelrc b/.babelrc
index 0e81c4ef9..299d5b4a0 100644
--- a/.babelrc
+++ b/.babelrc
@@ -4,7 +4,7 @@
4 "@babel/preset-env", 4 "@babel/preset-env",
5 { 5 {
6 "targets": { 6 "targets": {
7 "electron": 2 7 "electron": 4
8 } 8 }
9 } 9 }
10 ], 10 ],
diff --git a/package-lock.json b/package-lock.json
index 16fe71944..0bd55d1c4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
1{ 1{
2 "name": "franz", 2 "name": "franz",
3 "version": "5.0.0-beta.21", 3 "version": "5.0.0-beta.22",
4 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
@@ -1203,9 +1203,9 @@
1203 } 1203 }
1204 }, 1204 },
1205 "@types/node": { 1205 "@types/node": {
1206 "version": "8.10.38", 1206 "version": "8.10.39",
1207 "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.38.tgz", 1207 "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.39.tgz",
1208 "integrity": "sha512-EibsnbJerd0hBFaDjJStFrVbVBAtOy4dgL8zZFw0uOvPqzBAX59Ci8cgjg3+RgJIWhsB5A4c+pi+D4P9tQQh/A==", 1208 "integrity": "sha512-rE7fktr02J8ybFf6eysife+WF+L4sAHWzw09DgdCebEu+qDwMvv4zl6Bc+825ttGZP73kCKxa3dhJOoGJ8+5mA==",
1209 "dev": true 1209 "dev": true
1210 }, 1210 },
1211 "abbrev": { 1211 "abbrev": {
@@ -3548,13 +3548,13 @@
3548 "dev": true 3548 "dev": true
3549 }, 3549 },
3550 "electron": { 3550 "electron": {
3551 "version": "2.0.13", 3551 "version": "4.0.0-beta.9",
3552 "resolved": "https://registry.npmjs.org/electron/-/electron-2.0.13.tgz", 3552 "resolved": "https://registry.npmjs.org/electron/-/electron-4.0.0-beta.9.tgz",
3553 "integrity": "sha512-8ouYaLsp0F4sPI7QKgJkkJhrwj1JPSnBwbz6HHA9l6u7WofEt94lV+gHw71KJrDl7UaIkFwlSjyhIjG8lIZqxw==", 3553 "integrity": "sha512-BPFkN4BFQy88x2ZHVmzI03i1mUgaQF/uROPb/TlGB/WNAD3v2OvA9Ak9yZ5ADNnwhlR28DtUGs/MuZfDZHZBoQ==",
3554 "dev": true, 3554 "dev": true,
3555 "requires": { 3555 "requires": {
3556 "@types/node": "^8.0.24", 3556 "@types/node": "^8.0.24",
3557 "electron-download": "^3.0.1", 3557 "electron-download": "^4.1.0",
3558 "extract-zip": "^1.0.3" 3558 "extract-zip": "^1.0.3"
3559 } 3559 }
3560 }, 3560 },
@@ -3795,53 +3795,53 @@
3795 } 3795 }
3796 }, 3796 },
3797 "electron-download": { 3797 "electron-download": {
3798 "version": "3.3.0", 3798 "version": "4.1.1",
3799 "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", 3799 "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz",
3800 "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", 3800 "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==",
3801 "dev": true, 3801 "dev": true,
3802 "requires": { 3802 "requires": {
3803 "debug": "^2.2.0", 3803 "debug": "^3.0.0",
3804 "fs-extra": "^0.30.0", 3804 "env-paths": "^1.0.0",
3805 "home-path": "^1.0.1", 3805 "fs-extra": "^4.0.1",
3806 "minimist": "^1.2.0", 3806 "minimist": "^1.2.0",
3807 "nugget": "^2.0.0", 3807 "nugget": "^2.0.1",
3808 "path-exists": "^2.1.0", 3808 "path-exists": "^3.0.0",
3809 "rc": "^1.1.2", 3809 "rc": "^1.2.1",
3810 "semver": "^5.3.0", 3810 "semver": "^5.4.1",
3811 "sumchecker": "^1.2.0" 3811 "sumchecker": "^2.0.2"
3812 }, 3812 },
3813 "dependencies": { 3813 "dependencies": {
3814 "fs-extra": { 3814 "debug": {
3815 "version": "0.30.0", 3815 "version": "3.2.6",
3816 "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", 3816 "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
3817 "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", 3817 "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
3818 "dev": true, 3818 "dev": true,
3819 "requires": { 3819 "requires": {
3820 "graceful-fs": "^4.1.2", 3820 "ms": "^2.1.1"
3821 "jsonfile": "^2.1.0",
3822 "klaw": "^1.0.0",
3823 "path-is-absolute": "^1.0.0",
3824 "rimraf": "^2.2.8"
3825 } 3821 }
3826 }, 3822 },
3827 "jsonfile": { 3823 "fs-extra": {
3828 "version": "2.4.0", 3824 "version": "4.0.3",
3829 "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", 3825 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
3830 "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", 3826 "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
3831 "dev": true, 3827 "dev": true,
3832 "requires": { 3828 "requires": {
3833 "graceful-fs": "^4.1.6" 3829 "graceful-fs": "^4.1.2",
3830 "jsonfile": "^4.0.0",
3831 "universalify": "^0.1.0"
3834 } 3832 }
3835 }, 3833 },
3836 "sumchecker": { 3834 "ms": {
3837 "version": "1.3.1", 3835 "version": "2.1.1",
3838 "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", 3836 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
3839 "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", 3837 "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
3840 "dev": true, 3838 "dev": true
3841 "requires": { 3839 },
3842 "debug": "^2.2.0", 3840 "path-exists": {
3843 "es6-promise": "^4.0.5" 3841 "version": "3.0.0",
3844 } 3842 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
3843 "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
3844 "dev": true
3845 } 3845 }
3846 } 3846 }
3847 }, 3847 },
@@ -4193,6 +4193,12 @@
4193 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 4193 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
4194 "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" 4194 "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
4195 }, 4195 },
4196 "env-paths": {
4197 "version": "1.0.0",
4198 "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
4199 "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=",
4200 "dev": true
4201 },
4196 "error-ex": { 4202 "error-ex": {
4197 "version": "1.3.2", 4203 "version": "1.3.2",
4198 "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 4204 "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -4246,12 +4252,6 @@
4246 "es6-symbol": "^3.1.1" 4252 "es6-symbol": "^3.1.1"
4247 } 4253 }
4248 }, 4254 },
4249 "es6-promise": {
4250 "version": "4.2.5",
4251 "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
4252 "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
4253 "dev": true
4254 },
4255 "es6-symbol": { 4255 "es6-symbol": {
4256 "version": "3.1.1", 4256 "version": "3.1.1",
4257 "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", 4257 "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
@@ -6901,12 +6901,6 @@
6901 "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", 6901 "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=",
6902 "dev": true 6902 "dev": true
6903 }, 6903 },
6904 "home-path": {
6905 "version": "1.0.6",
6906 "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz",
6907 "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==",
6908 "dev": true
6909 },
6910 "homedir-polyfill": { 6904 "homedir-polyfill": {
6911 "version": "1.0.1", 6905 "version": "1.0.1",
6912 "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", 6906 "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
@@ -8046,15 +8040,6 @@
8046 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 8040 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
8047 "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 8041 "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
8048 }, 8042 },
8049 "klaw": {
8050 "version": "1.3.1",
8051 "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
8052 "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
8053 "dev": true,
8054 "requires": {
8055 "graceful-fs": "^4.1.9"
8056 }
8057 },
8058 "last-run": { 8043 "last-run": {
8059 "version": "1.1.1", 8044 "version": "1.1.1",
8060 "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", 8045 "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
@@ -9083,7 +9068,7 @@
9083 "dependencies": { 9068 "dependencies": {
9084 "pretty-bytes": { 9069 "pretty-bytes": {
9085 "version": "1.0.4", 9070 "version": "1.0.4",
9086 "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", 9071 "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
9087 "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", 9072 "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
9088 "dev": true, 9073 "dev": true,
9089 "requires": { 9074 "requires": {
@@ -9776,13 +9761,13 @@
9776 }, 9761 },
9777 "string_decoder": { 9762 "string_decoder": {
9778 "version": "0.10.31", 9763 "version": "0.10.31",
9779 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 9764 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
9780 "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 9765 "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
9781 "dev": true 9766 "dev": true
9782 }, 9767 },
9783 "through2": { 9768 "through2": {
9784 "version": "0.2.3", 9769 "version": "0.2.3",
9785 "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", 9770 "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
9786 "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", 9771 "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
9787 "dev": true, 9772 "dev": true,
9788 "requires": { 9773 "requires": {
@@ -11330,6 +11315,15 @@
11330 "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 11315 "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
11331 "dev": true 11316 "dev": true
11332 }, 11317 },
11318 "sumchecker": {
11319 "version": "2.0.2",
11320 "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
11321 "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
11322 "dev": true,
11323 "requires": {
11324 "debug": "^2.2.0"
11325 }
11326 },
11333 "supports-color": { 11327 "supports-color": {
11334 "version": "2.0.0", 11328 "version": "2.0.0",
11335 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 11329 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
diff --git a/package.json b/package.json
index 05921d1a1..b7a43ee07 100644
--- a/package.json
+++ b/package.json
@@ -98,7 +98,7 @@
98 "cross-env": "^5.0.5", 98 "cross-env": "^5.0.5",
99 "cz-conventional-changelog": "2.1.0", 99 "cz-conventional-changelog": "2.1.0",
100 "dotenv": "^4.0.0", 100 "dotenv": "^4.0.0",
101 "electron": "^2.0.13", 101 "electron": "4.0.0-beta.9",
102 "electron-builder": "20.34.0", 102 "electron-builder": "20.34.0",
103 "electron-rebuild": "^1.6.0", 103 "electron-rebuild": "^1.6.0",
104 "eslint": "5.10.0", 104 "eslint": "5.10.0",
diff --git a/src/index.js b/src/index.js
index 830166dcf..75da4ff88 100644
--- a/src/index.js
+++ b/src/index.js
@@ -46,35 +46,69 @@ if (isWindows) {
46} 46}
47 47
48// Force single window 48// Force single window
49const isSecondInstance = app.makeSingleInstance((argv) => { 49const gotTheLock = app.requestSingleInstanceLock();
50 if (mainWindow) { 50if (!gotTheLock) {
51 if (mainWindow.isMinimized()) mainWindow.restore(); 51 app.quit();
52 mainWindow.focus(); 52} else {
53 app.on('second-instance', (event, argv) => {
54 // Someone tried to run a second instance, we should focus our window.
55 if (mainWindow) {
56 if (mainWindow.isMinimized()) mainWindow.restore();
57 mainWindow.focus();
53 58
54 if (process.platform === 'win32') { 59 if (isWindows) {
55 // Keep only command line / deep linked arguments 60 // Keep only command line / deep linked arguments
56 const url = argv.slice(1); 61 const url = argv.slice(1);
57 62
58 if (url) { 63 if (url) {
59 handleDeepLink(mainWindow, url.toString()); 64 handleDeepLink(mainWindow, url.toString());
65 }
60 } 66 }
61 }
62 }
63 67
64 if (argv.includes('--reset-window')) { 68 if (argv.includes('--reset-window')) {
65 // Needs to be delayed to not interfere with mainWindow.restore(); 69 // Needs to be delayed to not interfere with mainWindow.restore();
66 setTimeout(() => { 70 setTimeout(() => {
67 debug('Resetting windows via Task'); 71 debug('Resetting windows via Task');
68 mainWindow.setPosition(DEFAULT_WINDOW_OPTIONS.x + 100, DEFAULT_WINDOW_OPTIONS.y + 100); 72 mainWindow.setPosition(DEFAULT_WINDOW_OPTIONS.x + 100, DEFAULT_WINDOW_OPTIONS.y + 100);
69 mainWindow.setSize(DEFAULT_WINDOW_OPTIONS.width, DEFAULT_WINDOW_OPTIONS.height); 73 mainWindow.setSize(DEFAULT_WINDOW_OPTIONS.width, DEFAULT_WINDOW_OPTIONS.height);
70 }, 1); 74 }, 1);
71 } 75 }
72}); 76 }
77 });
73 78
74if (isSecondInstance) { 79 // Create myWindow, load the rest of the app, etc...
75 console.log('An instance of Franz is already running. Exiting...'); 80 app.on('ready', () => {
76 app.exit(); 81 });
77} 82}
83// const isSecondInstance = app.makeSingleInstance((argv) => {
84// if (mainWindow) {
85// if (mainWindow.isMinimized()) mainWindow.restore();
86// mainWindow.focus();
87
88// if (process.platform === 'win32') {
89// // Keep only command line / deep linked arguments
90// const url = argv.slice(1);
91
92// if (url) {
93// handleDeepLink(mainWindow, url.toString());
94// }
95// }
96// }
97
98// if (argv.includes('--reset-window')) {
99// // Needs to be delayed to not interfere with mainWindow.restore();
100// setTimeout(() => {
101// debug('Resetting windows via Task');
102// mainWindow.setPosition(DEFAULT_WINDOW_OPTIONS.x + 100, DEFAULT_WINDOW_OPTIONS.y + 100);
103// mainWindow.setSize(DEFAULT_WINDOW_OPTIONS.width, DEFAULT_WINDOW_OPTIONS.height);
104// }, 1);
105// }
106// });
107
108// if (isSecondInstance) {
109// console.log('An instance of Franz is already running. Exiting...');
110// app.exit();
111// }
78 112
79// Fix Unity indicator issue 113// Fix Unity indicator issue
80// https://github.com/electron/electron/issues/9046 114// https://github.com/electron/electron/issues/9046
diff --git a/src/models/Service.js b/src/models/Service.js
index 4cc6102ff..84fded584 100644
--- a/src/models/Service.js
+++ b/src/models/Service.js
@@ -114,6 +114,13 @@ export default class Service {
114 }); 114 });
115 } 115 }
116 116
117 @computed get shareWithWebview() {
118 return {
119 spellcheckerLanguage: this.spellcheckerLanguage,
120 isDarkModeEnabled: this.isDarkModeEnabled,
121 };
122 }
123
117 @computed get url() { 124 @computed get url() {
118 if (this.recipe.hasCustomUrl && this.customUrl) { 125 if (this.recipe.hasCustomUrl && this.customUrl) {
119 let url; 126 let url;
@@ -162,14 +169,14 @@ export default class Service {
162 return userAgent; 169 return userAgent;
163 } 170 }
164 171
165 initializeWebViewEvents(store) { 172 initializeWebViewEvents({ handleIPCMessage, openWindow }) {
166 this.webview.addEventListener('ipc-message', e => store.actions.service.handleIPCMessage({ 173 this.webview.addEventListener('ipc-message', e => handleIPCMessage({
167 serviceId: this.id, 174 serviceId: this.id,
168 channel: e.channel, 175 channel: e.channel,
169 args: e.args, 176 args: e.args,
170 })); 177 }));
171 178
172 this.webview.addEventListener('new-window', (event, url, frameName, options) => store.actions.service.openWindow({ 179 this.webview.addEventListener('new-window', (event, url, frameName, options) => openWindow({
173 event, 180 event,
174 url, 181 url,
175 frameName, 182 frameName,
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 5b70ca271..b0a926d6a 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -1,5 +1,8 @@
1import { 1import {
2 action, reaction, computed, observable, 2 action,
3 reaction,
4 computed,
5 observable,
3} from 'mobx'; 6} from 'mobx';
4import { debounce, remove } from 'lodash'; 7import { debounce, remove } from 'lodash';
5 8
@@ -318,12 +321,17 @@ export default class ServicesStore extends Store {
318 } 321 }
319 322
320 @action _setWebviewReference({ serviceId, webview }) { 323 @action _setWebviewReference({ serviceId, webview }) {
324 debug('Set webview reference', serviceId, webview)
321 const service = this.one(serviceId); 325 const service = this.one(serviceId);
322 326
323 service.webview = webview; 327 service.webview = webview;
324 328
325 if (!service.isAttached) { 329 if (!service.isAttached) {
326 service.initializeWebViewEvents(this); 330 debug('Webview is not attached, initializing');
331 service.initializeWebViewEvents({
332 handleIPCMessage: this.actions.service.handleIPCMessage,
333 openWindow: this.actions.service.openWindow,
334 });
327 service.initializeWebViewListener(); 335 service.initializeWebViewListener();
328 } 336 }
329 337
@@ -644,14 +652,15 @@ export default class ServicesStore extends Store {
644 const service = this.one(serviceId); 652 const service = this.one(serviceId);
645 653
646 if (service.webview) { 654 if (service.webview) {
647 service.webview.send('initialize-recipe', service); 655 debug('Initialize recipe', service.recipe.id, service.name);
656 service.webview.send('initialize-recipe', service.shareWithWebview, service.recipe);
648 } 657 }
649 } 658 }
650 659
651 _initRecipePolling(serviceId) { 660 _initRecipePolling(serviceId) {
652 const service = this.one(serviceId); 661 const service = this.one(serviceId);
653 662
654 const delay = 1000; 663 const delay = 2000;
655 664
656 if (service) { 665 if (service) {
657 if (service.timer !== null) { 666 if (service.timer !== null) {
diff --git a/src/webview/recipe.js b/src/webview/recipe.js
index 944883899..9aa89ce01 100644
--- a/src/webview/recipe.js
+++ b/src/webview/recipe.js
@@ -42,9 +42,9 @@ class RecipeController {
42 42
43 async initialize() { 43 async initialize() {
44 Object.keys(this.ipcEvents).forEach((channel) => { 44 Object.keys(this.ipcEvents).forEach((channel) => {
45 ipcRenderer.on(channel, (event, data) => { 45 ipcRenderer.on(channel, (...args) => {
46 debug('Received IPC event for channel', channel, 'with', data); 46 debug('Received IPC event for channel', channel, 'with', ...args);
47 this[this.ipcEvents[channel]](event, data); 47 this[this.ipcEvents[channel]](...args);
48 }); 48 });
49 }); 49 });
50 50
@@ -62,17 +62,18 @@ class RecipeController {
62 autorun(() => this.update()); 62 autorun(() => this.update());
63 } 63 }
64 64
65 loadRecipeModule(event, data) { 65 loadRecipeModule(event, config, recipe) {
66 debug('loadRecipeModule'); 66 debug('loadRecipeModule');
67 const modulePath = path.join(data.recipe.path, 'webview.js'); 67 const modulePath = path.join(recipe.path, 'webview.js');
68 debug('module path', modulePath);
68 // Delete module from cache 69 // Delete module from cache
69 delete require.cache[require.resolve(modulePath)]; 70 delete require.cache[require.resolve(modulePath)];
70 try { 71 try {
71 // eslint-disable-next-line 72 // eslint-disable-next-line
72 require(modulePath)(new RecipeWebview(), data); 73 require(modulePath)(new RecipeWebview(), {...config, recipe,});
73 debug('Initialize Recipe', data); 74 debug('Initialize Recipe', config, recipe);
74 75
75 this.settings.service = data; 76 this.settings.service = config;
76 } catch (err) { 77 } catch (err) {
77 console.error('Recipe initialization failed', err); 78 console.error('Recipe initialization failed', err);
78 } 79 }