diff options
Diffstat (limited to 'src/webview')
-rw-r--r-- | src/webview/badge.ts | 19 | ||||
-rw-r--r-- | src/webview/lib/RecipeWebview.js | 9 | ||||
-rw-r--r-- | src/webview/recipe.js | 2 |
3 files changed, 23 insertions, 7 deletions
diff --git a/src/webview/badge.ts b/src/webview/badge.ts index fc420b903..753e90fef 100644 --- a/src/webview/badge.ts +++ b/src/webview/badge.ts | |||
@@ -12,24 +12,29 @@ export class BadgeHandler { | |||
12 | }; | 12 | }; |
13 | } | 13 | } |
14 | 14 | ||
15 | _normalizeNumber(count: string | number) { | 15 | // TODO: Need to extract this into a utility class and reuse outside of the recipes |
16 | safeParseInt(text: string | number | undefined | null) { | ||
17 | if (text === undefined || text === null) { | ||
18 | return 0; | ||
19 | } | ||
20 | |||
16 | // Parse number to integer | 21 | // Parse number to integer |
17 | // This will correct errors that recipes may introduce, e.g. | 22 | // This will correct errors that recipes may introduce, e.g. |
18 | // by sending a String instead of an integer | 23 | // by sending a String instead of an integer |
19 | const parsedNumber = parseInt(count.toString(), 10); | 24 | const parsedNumber = parseInt(text.toString(), 10); |
20 | const adjustedNumber = Number.isNaN(parsedNumber) ? 0 : parsedNumber; | 25 | const adjustedNumber = Number.isNaN(parsedNumber) ? 0 : parsedNumber; |
21 | return Math.max(adjustedNumber, 0); | 26 | return Math.max(adjustedNumber, 0); |
22 | } | 27 | } |
23 | 28 | ||
24 | setBadge(direct: number, indirect: number) { | 29 | setBadge(direct: string | number, indirect: string | number) { |
25 | if (this.countCache.direct === direct | 30 | if (this.countCache.direct.toString() === direct.toString() |
26 | && this.countCache.indirect === indirect) { | 31 | && this.countCache.indirect.toString() === indirect.toString()) { |
27 | return; | 32 | return; |
28 | } | 33 | } |
29 | 34 | ||
30 | const count = { | 35 | const count = { |
31 | direct: this._normalizeNumber(direct), | 36 | direct: this.safeParseInt(direct), |
32 | indirect: this._normalizeNumber(indirect), | 37 | indirect: this.safeParseInt(indirect), |
33 | }; | 38 | }; |
34 | 39 | ||
35 | debug('Sending badge count to host', count); | 40 | debug('Sending badge count to host', count); |
diff --git a/src/webview/lib/RecipeWebview.js b/src/webview/lib/RecipeWebview.js index 96caa125e..2bd6bad8d 100644 --- a/src/webview/lib/RecipeWebview.js +++ b/src/webview/lib/RecipeWebview.js | |||
@@ -47,6 +47,15 @@ class RecipeWebview { | |||
47 | } | 47 | } |
48 | 48 | ||
49 | /** | 49 | /** |
50 | * Safely parse the given text into an integer | ||
51 | * | ||
52 | * @param {string | number | undefined | null} text to be parsed | ||
53 | */ | ||
54 | safeParseInt(text) { | ||
55 | return this.badgeHandler.safeParseInt(text); | ||
56 | } | ||
57 | |||
58 | /** | ||
50 | * Injects the contents of a CSS file into the current webview | 59 | * Injects the contents of a CSS file into the current webview |
51 | * | 60 | * |
52 | * @param {Array} files CSS files that should be injected. This must | 61 | * @param {Array} files CSS files that should be injected. This must |
diff --git a/src/webview/recipe.js b/src/webview/recipe.js index f88b94cfe..1981c8731 100644 --- a/src/webview/recipe.js +++ b/src/webview/recipe.js | |||
@@ -102,6 +102,8 @@ contextBridge.exposeInMainWorld('ferdi', { | |||
102 | open: window.open, | 102 | open: window.open, |
103 | setBadge: (direct, indirect) => | 103 | setBadge: (direct, indirect) => |
104 | badgeHandler.setBadge(direct, indirect), | 104 | badgeHandler.setBadge(direct, indirect), |
105 | safeParseInt: (text) => | ||
106 | badgeHandler.safeParseInt(text), | ||
105 | displayNotification: (title, options) => | 107 | displayNotification: (title, options) => |
106 | notificationsHandler.displayNotification(title, options), | 108 | notificationsHandler.displayNotification(title, options), |
107 | getDisplayMediaSelector, | 109 | getDisplayMediaSelector, |