From 5c350b370cbe8430582d25b062c8de19fdec033b Mon Sep 17 00:00:00 2001 From: Vijay A Date: Mon, 26 Dec 2022 13:26:12 +0530 Subject: Minor refactoring --- src/index.ts | 21 ++++++++++++++++----- src/jsUtils.ts | 15 ++++++++++++++- src/webview/badge.ts | 19 +++---------------- src/webview/lib/RecipeWebview.ts | 3 ++- src/webview/recipe.ts | 15 ++++++++++----- 5 files changed, 45 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/index.ts b/src/index.ts index 08e81a2a8..bb6d64d1e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -101,7 +101,7 @@ const retrieveSettingValue = (key: string, defaultValue: boolean | string) => const liftSingleInstanceLock = retrieveSettingValue( 'liftSingleInstanceLock', - false, + DEFAULT_APP_SETTINGS.liftSingleInstanceLock, ); // Force single window @@ -165,7 +165,12 @@ if ( } // Disable GPU acceleration -if (!retrieveSettingValue('enableGPUAcceleration', false)) { +if ( + !retrieveSettingValue( + 'enableGPUAcceleration', + DEFAULT_APP_SETTINGS.enableGPUAcceleration, + ) +) { debug('Disable GPU Acceleration'); app.disableHardwareAcceleration(); } @@ -198,9 +203,15 @@ const createWindow = () => { } // Create the browser window. - const backgroundColor = retrieveSettingValue('darkMode', false) + const backgroundColor = retrieveSettingValue( + 'darkMode', + DEFAULT_APP_SETTINGS.darkMode, + ) ? '#1E1E1E' - : settings.get('accentColor'); + : (retrieveSettingValue( + 'accentColor', + DEFAULT_APP_SETTINGS.accentColor, + ) as string); mainWindow = new BrowserWindow({ x: posX, @@ -217,7 +228,7 @@ const createWindow = () => { spellcheck: retrieveSettingValue( 'enableSpellchecking', DEFAULT_APP_SETTINGS.enableSpellchecking, - ) as boolean | undefined, + ) as boolean, nodeIntegration: true, contextIsolation: false, webviewTag: true, diff --git a/src/jsUtils.ts b/src/jsUtils.ts index b93d6db5b..0cc83bb91 100644 --- a/src/jsUtils.ts +++ b/src/jsUtils.ts @@ -9,4 +9,17 @@ export const convertToJSON = (data: string | any | undefined | null) => export const cleanseJSObject = (data: any | undefined | null) => JSON.parse(JSON.stringify(data)); -export const isEscKeyPress = (keyCode: Number) => keyCode === 27; +export const isEscKeyPress = (keyCode: number) => keyCode === 27; + +export const safeParseInt = (text: string | number | undefined | null) => { + if (text === undefined || text === null) { + return 0; + } + + // Parse number to integer + // This will correct errors that recipes may introduce, e.g. + // by sending a String instead of an integer + const parsedNumber = Number.parseInt(text.toString(), 10); + const adjustedNumber = Number.isNaN(parsedNumber) ? 0 : parsedNumber; + return Math.max(adjustedNumber, 0); +}; diff --git a/src/webview/badge.ts b/src/webview/badge.ts index afecd22d4..b33d05255 100644 --- a/src/webview/badge.ts +++ b/src/webview/badge.ts @@ -1,29 +1,16 @@ import { ipcRenderer } from 'electron'; +import { safeParseInt } from '../jsUtils'; const debug = require('../preload-safe-debug')('Ferdium:Plugin:BadgeHandler'); export default class BadgeHandler { - // TODO: Need to extract this into a utility class and reuse outside of the recipes - safeParseInt(text: string | number | undefined | null) { - if (text === undefined || text === null) { - return 0; - } - - // Parse number to integer - // This will correct errors that recipes may introduce, e.g. - // by sending a String instead of an integer - const parsedNumber = Number.parseInt(text.toString(), 10); - const adjustedNumber = Number.isNaN(parsedNumber) ? 0 : parsedNumber; - return Math.max(adjustedNumber, 0); - } - setBadge( direct: string | number | undefined | null, indirect: string | number | undefined | null, ) { const count = { - direct: this.safeParseInt(direct), - indirect: this.safeParseInt(indirect), + direct: safeParseInt(direct), + indirect: safeParseInt(indirect), }; debug('Sending badge count to host: %j', count); diff --git a/src/webview/lib/RecipeWebview.ts b/src/webview/lib/RecipeWebview.ts index 20be3f866..436525b9e 100644 --- a/src/webview/lib/RecipeWebview.ts +++ b/src/webview/lib/RecipeWebview.ts @@ -1,6 +1,7 @@ import { ipcRenderer } from 'electron'; import { BrowserWindow } from '@electron/remote'; import { pathExistsSync, readFileSync, existsSync } from 'fs-extra'; +import { safeParseInt } from '../../jsUtils'; const debug = require('../../preload-safe-debug')( 'Ferdium:Plugin:RecipeWebview', @@ -91,7 +92,7 @@ class RecipeWebview { * @param {string | number | undefined | null} text to be parsed */ safeParseInt(text) { - return this.badgeHandler.safeParseInt(text); + return safeParseInt(text); } /** diff --git a/src/webview/recipe.ts b/src/webview/recipe.ts index dc3f39401..ed45192d3 100644 --- a/src/webview/recipe.ts +++ b/src/webview/recipe.ts @@ -44,7 +44,7 @@ import { } from './spellchecker'; import { DEFAULT_APP_SETTINGS } from '../config'; -import { ifUndefined } from '../jsUtils'; +import { ifUndefined, safeParseInt } from '../jsUtils'; import { AppStore } from '../@types/stores.types'; import Service from '../models/Service'; @@ -116,10 +116,15 @@ window.open = (url, frameName, features): WindowProxy | null => { // then overwrite the corresponding field of the window object by injected JS. contextBridge.exposeInMainWorld('ferdium', { open: window.open, - setBadge: (direct, indirect) => badgeHandler.setBadge(direct, indirect), - safeParseInt: text => badgeHandler.safeParseInt(text), - setDialogTitle: title => dialogTitleHandler.setDialogTitle(title), - displayNotification: (title, options) => + setBadge: ( + direct: string | number | null | undefined, + indirect: string | number | null | undefined, + ) => badgeHandler.setBadge(direct, indirect), + safeParseInt: (text: string | number | null | undefined) => + safeParseInt(text), + setDialogTitle: (title: string | null | undefined) => + dialogTitleHandler.setDialogTitle(title), + displayNotification: (title: string, options: any) => notificationsHandler.displayNotification(title, options), getDisplayMediaSelector, }); -- cgit v1.2.3-54-g00ecf