From 068f9f67da20a7676275615ef9a7f8ea063a1b88 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Tue, 12 Apr 2022 08:14:33 +0300 Subject: [PATCH] Introduce more abstractions for electron Signed-off-by: Janne Savolainen --- .../electron-app/power-monitor.injectable.ts | 14 ++++++++++++ .../set-application-name.injectable.ts | 20 +++++++++++++++++ .../when-system-shutdown.injectable.ts | 22 +++++++++++++++++++ src/main/getDiForUnitTesting.ts | 6 +++++ .../setup-application-name.injectable.ts | 6 ++--- ...cation-when-system-shutdowns.injectable.ts | 7 +++--- 6 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 src/main/electron-app/power-monitor.injectable.ts create mode 100644 src/main/electron-app/set-application-name.injectable.ts create mode 100644 src/main/electron-app/when-system-shutdown.injectable.ts diff --git a/src/main/electron-app/power-monitor.injectable.ts b/src/main/electron-app/power-monitor.injectable.ts new file mode 100644 index 0000000000..6ef08938fd --- /dev/null +++ b/src/main/electron-app/power-monitor.injectable.ts @@ -0,0 +1,14 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { powerMonitor } from "electron"; + +const powerMonitorInjectable = getInjectable({ + id: "power-monitor", + instantiate: () => powerMonitor, + causesSideEffects: true, +}); + +export default powerMonitorInjectable; diff --git a/src/main/electron-app/set-application-name.injectable.ts b/src/main/electron-app/set-application-name.injectable.ts new file mode 100644 index 0000000000..8763001e10 --- /dev/null +++ b/src/main/electron-app/set-application-name.injectable.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import electronAppInjectable from "./electron-app.injectable"; + +const setApplicationNameInjectable = getInjectable({ + id: "set-application-name", + + instantiate: (di) => { + const app = di.inject(electronAppInjectable); + + return (name: string) => { + app.setName(name); + }; + }, +}); + +export default setApplicationNameInjectable; diff --git a/src/main/electron-app/when-system-shutdown.injectable.ts b/src/main/electron-app/when-system-shutdown.injectable.ts new file mode 100644 index 0000000000..16c15f1f35 --- /dev/null +++ b/src/main/electron-app/when-system-shutdown.injectable.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import powerMonitorInjectable from "./power-monitor.injectable"; + +const whenSystemShutdownInjectable = getInjectable({ + id: "when-system-shutdown", + + instantiate: (di) => { + const powerMonitor = di.inject(powerMonitorInjectable); + + return (callback: () => void) => { + powerMonitor.on("shutdown", () => { + callback(); + }); + }; + }, +}); + +export default whenSystemShutdownInjectable; diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index 0a7bc3b1ec..8ac51beb51 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -39,6 +39,9 @@ import whenApplicationIsActivatedInjectable from "./electron-app/when-applicatio import whenApplicationWillQuitInjectable from "./electron-app/when-application-will-quit.injectable"; import whenOpeningUrlInjectable from "./electron-app/when-opening-url.injectable"; import whenSecondInstanceInjectable from "./electron-app/when-second-instance.injectable"; +import whenSystemShutdownInjectable from "./electron-app/when-system-shutdown.injectable"; +import exitAppInjectable from "./electron-app/exit-app.injectable"; +import setApplicationNameInjectable from "./electron-app/set-application-name.injectable"; export const getDiForUnitTesting = ( { doGeneralOverrides } = { doGeneralOverrides: false }, @@ -71,6 +74,9 @@ export const getDiForUnitTesting = ( di.override(whenApplicationWillQuitInjectable, () => () => {}); di.override(whenOpeningUrlInjectable, () => () => {}); di.override(whenSecondInstanceInjectable, () => () => {}); + di.override(whenSystemShutdownInjectable, () => () => {}); + di.override(exitAppInjectable, () => () => {}); + di.override(setApplicationNameInjectable, () => () => {}); // eslint-disable-next-line unused-imports/no-unused-vars-ts di.override(extensionsStoreInjectable, () => ({ isEnabled: ({ id, isBundled }) => false }) as ExtensionsStore); diff --git a/src/main/start-main-application/before-application-is-ready/implementations/setup-application-name.injectable.ts b/src/main/start-main-application/before-application-is-ready/implementations/setup-application-name.injectable.ts index 6e56b63f63..8d299e4440 100644 --- a/src/main/start-main-application/before-application-is-ready/implementations/setup-application-name.injectable.ts +++ b/src/main/start-main-application/before-application-is-ready/implementations/setup-application-name.injectable.ts @@ -3,19 +3,19 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import electronAppInjectable from "../../../electron-app/electron-app.injectable"; import appNameInjectable from "../../../app-paths/app-name/app-name.injectable"; import { beforeApplicationIsReadyInjectionToken } from "../before-application-is-ready-injection-token"; +import setApplicationNameInjectable from "../../../electron-app/set-application-name.injectable"; const setupApplicationNameInjectable = getInjectable({ id: "setup-application-name", instantiate: (di) => ({ run: () => { - const app = di.inject(electronAppInjectable); + const setApplicationName = di.inject(setApplicationNameInjectable); const appName = di.inject(appNameInjectable); - app.setName(appName); + setApplicationName(appName); }, }), diff --git a/src/main/start-main-application/before-application-is-ready/implementations/setup-shutdown-of-application-when-system-shutdowns.injectable.ts b/src/main/start-main-application/before-application-is-ready/implementations/setup-shutdown-of-application-when-system-shutdowns.injectable.ts index f80b91ee68..6e91af588e 100644 --- a/src/main/start-main-application/before-application-is-ready/implementations/setup-shutdown-of-application-when-system-shutdowns.injectable.ts +++ b/src/main/start-main-application/before-application-is-ready/implementations/setup-shutdown-of-application-when-system-shutdowns.injectable.ts @@ -3,25 +3,24 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { powerMonitor } from "electron"; import exitAppInjectable from "../../../electron-app/exit-app.injectable"; import { beforeApplicationIsReadyInjectionToken } from "../before-application-is-ready-injection-token"; +import whenSystemShutdownInjectable from "../../../electron-app/when-system-shutdown.injectable"; const setupShutdownOfApplicationWhenSystemShutdownsInjectable = getInjectable({ id: "setup-shutdown-of-application-when-system-shutdowns", instantiate: (di) => { const exitApp = di.inject(exitAppInjectable); + const whenSystemShutdown = di.inject(whenSystemShutdownInjectable); return { run: () => { - powerMonitor.on("shutdown", exitApp); + whenSystemShutdown(exitApp); }, }; }, - causesSideEffects: true, - injectionToken: beforeApplicationIsReadyInjectionToken, });