aboutsummaryrefslogtreecommitdiffstats
path: root/src/webview/lib/RecipeWebview.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/webview/lib/RecipeWebview.js')
-rw-r--r--src/webview/lib/RecipeWebview.js48
1 files changed, 23 insertions, 25 deletions
diff --git a/src/webview/lib/RecipeWebview.js b/src/webview/lib/RecipeWebview.js
index b8fe7dc52..3bb9352f6 100644
--- a/src/webview/lib/RecipeWebview.js
+++ b/src/webview/lib/RecipeWebview.js
@@ -1,14 +1,12 @@
1import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { pathExistsSync, readFile } from 'fs-extra'; 2import { exists, pathExistsSync, readFile } from 'fs-extra';
3 3
4const debug = require('debug')('Ferdi:Plugin:RecipeWebview'); 4const debug = require('debug')('Ferdi:Plugin:RecipeWebview');
5 5
6class RecipeWebview { 6class RecipeWebview {
7 constructor() { 7 constructor(badgeHandler, notificationsHandler) {
8 this.countCache = { 8 this.badgeHandler = badgeHandler;
9 direct: 0, 9 this.notificationsHandler = notificationsHandler;
10 indirect: 0,
11 };
12 10
13 ipcRenderer.on('poll', () => { 11 ipcRenderer.on('poll', () => {
14 this.loopFunc(); 12 this.loopFunc();
@@ -45,24 +43,7 @@ class RecipeWebview {
45 * me directly to me eg. in a channel 43 * me directly to me eg. in a channel
46 */ 44 */
47 setBadge(direct = 0, indirect = 0) { 45 setBadge(direct = 0, indirect = 0) {
48 if (this.countCache.direct === direct 46 this.badgeHandler.setBadge(direct, indirect);
49 && this.countCache.indirect === indirect) return;
50
51 // Parse number to integer
52 // This will correct errors that recipes may introduce, e.g.
53 // by sending a String instead of an integer
54 const directInt = parseInt(direct, 10);
55 const indirectInt = parseInt(indirect, 10);
56
57 const count = {
58 direct: Math.max(directInt, 0),
59 indirect: Math.max(indirectInt, 0),
60 };
61
62 ipcRenderer.sendToHost('message-counts', count);
63 Object.assign(this.countCache, count);
64
65 debug('Sending badge count to host', count);
66 } 47 }
67 48
68 /** 49 /**
@@ -85,6 +66,23 @@ class RecipeWebview {
85 }); 66 });
86 } 67 }
87 68
69 injectJSUnsafe(...files) {
70 Promise.all(files.map(async (file) => {
71 if (await exists(file)) {
72 const data = await readFile(file, 'utf8');
73 return data;
74 }
75 debug('Script not found', file);
76 return null;
77 })).then(async (scripts) => {
78 const scriptsFound = scripts.filter(script => script !== null);
79 if (scriptsFound.length > 0) {
80 debug('Inject scripts to main world', scriptsFound);
81 ipcRenderer.sendToHost('inject-js-unsafe', ...scriptsFound);
82 }
83 });
84 }
85
88 /** 86 /**
89 * Set a custom handler for turning on and off dark mode 87 * Set a custom handler for turning on and off dark mode
90 * 88 *
@@ -96,7 +94,7 @@ class RecipeWebview {
96 94
97 onNotify(fn) { 95 onNotify(fn) {
98 if (typeof fn === 'function') { 96 if (typeof fn === 'function') {
99 window.Notification.prototype.onNotify = fn; 97 this.notificationsHandler.onNotify = fn;
100 } 98 }
101 } 99 }
102 100