From c36aaa557ea1dcec232843974f5506bd4de8d221 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 20 Apr 2022 10:10:07 +0300 Subject: [PATCH] Abstract event of device shutdown from electron Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- ...fter-application-activation.injectable.ts} | 6 ++-- ...s => before-device-shutdown.injectable.ts} | 12 ++++---- src/main/getDiForUnitTesting.ts | 8 +++--- ...pplication-activation-events.injectable.ts | 11 +++----- ...setup-device-shutdown-events.injectable.ts | 28 +++++++++++++++++++ ...cation-when-system-shutdowns.injectable.ts | 27 ------------------ .../before-device-shutdown-injection-token.ts | 10 +++++++ .../exit-app-before-shutdown.injectable.ts | 25 +++++++++++++++++ 8 files changed, 80 insertions(+), 47 deletions(-) rename src/main/electron-app/{on-application-activate.injectable.ts => after-application-activation.injectable.ts} (82%) rename src/main/electron-app/{when-system-shutdown.injectable.ts => before-device-shutdown.injectable.ts} (59%) create mode 100644 src/main/start-main-application/after-application-is-ready/implementations/setup-device-shutdown-events.injectable.ts delete mode 100644 src/main/start-main-application/before-application-is-ready/implementations/setup-shutdown-of-application-when-system-shutdowns.injectable.ts create mode 100644 src/main/start-main-application/before-device-shutdown/before-device-shutdown-injection-token.ts create mode 100644 src/main/start-main-application/before-device-shutdown/implementations/exit-app-before-shutdown.injectable.ts diff --git a/src/main/electron-app/on-application-activate.injectable.ts b/src/main/electron-app/after-application-activation.injectable.ts similarity index 82% rename from src/main/electron-app/on-application-activate.injectable.ts rename to src/main/electron-app/after-application-activation.injectable.ts index ee9cb3a158..f93bf4ab53 100644 --- a/src/main/electron-app/on-application-activate.injectable.ts +++ b/src/main/electron-app/after-application-activation.injectable.ts @@ -6,8 +6,8 @@ import { getInjectable } from "@ogre-tools/injectable"; import electronAppInjectable from "./electron-app.injectable"; import type { ActivationArgs } from "../start-main-application/after-application-activation/after-application-activation-injection-token"; -const onApplicationActivateInjectable = getInjectable({ - id: "on-application-activate", +const afterApplicationActivationInjectable = getInjectable({ + id: "after-application-activation", instantiate: (di) => { const app = di.inject(electronAppInjectable); @@ -22,4 +22,4 @@ const onApplicationActivateInjectable = getInjectable({ }, }); -export default onApplicationActivateInjectable; +export default afterApplicationActivationInjectable; diff --git a/src/main/electron-app/when-system-shutdown.injectable.ts b/src/main/electron-app/before-device-shutdown.injectable.ts similarity index 59% rename from src/main/electron-app/when-system-shutdown.injectable.ts rename to src/main/electron-app/before-device-shutdown.injectable.ts index 16c15f1f35..0ec7f665fa 100644 --- a/src/main/electron-app/when-system-shutdown.injectable.ts +++ b/src/main/electron-app/before-device-shutdown.injectable.ts @@ -5,18 +5,18 @@ import { getInjectable } from "@ogre-tools/injectable"; import powerMonitorInjectable from "./power-monitor.injectable"; -const whenSystemShutdownInjectable = getInjectable({ - id: "when-system-shutdown", +const beforeDeviceShutdownInjectable = getInjectable({ + id: "before-device-shutdown", instantiate: (di) => { const powerMonitor = di.inject(powerMonitorInjectable); - return (callback: () => void) => { - powerMonitor.on("shutdown", () => { - callback(); + return (callback: () => Promise | void) => { + powerMonitor.on("shutdown", async () => { + await callback(); }); }; }, }); -export default whenSystemShutdownInjectable; +export default beforeDeviceShutdownInjectable; diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index 81ca83190b..ef44128cba 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -59,7 +59,6 @@ import setupSystemCaInjectable from "./start-main-application/before-application 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"; import getCommandLineSwitchInjectable from "./electron-app/get-command-line-switch.injectable"; @@ -69,7 +68,8 @@ import shouldStartHiddenInjectable from "./electron-app/should-start-hidden.inje import registerProtocolClientInjectable from "./electron-app/register-protocol-client.injectable"; import getElectronAppPathInjectable from "./app-paths/get-electron-app-path/get-electron-app-path.injectable"; import setElectronAppPathInjectable from "./app-paths/set-electron-app-path/set-electron-app-path.injectable"; -import onApplicationActivateInjectable from "./electron-app/on-application-activate.injectable"; +import afterApplicationActivationInjectable from "./electron-app/after-application-activation.injectable"; +import beforeDeviceShutdownInjectable from "./electron-app/before-device-shutdown.injectable"; export const getDiForUnitTesting = ( { doGeneralOverrides } = { doGeneralOverrides: false }, @@ -190,11 +190,11 @@ const overrideOperatingSystem = (di: DiContainer) => { }; const overrideElectron = (di: DiContainer) => { - di.override(onApplicationActivateInjectable, () => () => {}); + di.override(afterApplicationActivationInjectable, () => () => {}); di.override(whenApplicationWillQuitInjectable, () => () => {}); di.override(whenOpeningUrlInjectable, () => () => {}); di.override(whenSecondInstanceInjectable, () => () => {}); - di.override(whenSystemShutdownInjectable, () => () => {}); + di.override(beforeDeviceShutdownInjectable, () => () => {}); di.override(exitAppInjectable, () => () => {}); di.override(setApplicationNameInjectable, () => () => {}); di.override(getCommandLineSwitchInjectable, () => () => "irrelevant"); diff --git a/src/main/start-main-application/after-application-is-ready/implementations/setup-application-activation-events.injectable.ts b/src/main/start-main-application/after-application-is-ready/implementations/setup-application-activation-events.injectable.ts index 71ed0c659c..590232652f 100644 --- a/src/main/start-main-application/after-application-is-ready/implementations/setup-application-activation-events.injectable.ts +++ b/src/main/start-main-application/after-application-is-ready/implementations/setup-application-activation-events.injectable.ts @@ -4,8 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { runManyFor } from "../../run-many-for"; -import onApplicationActivateInjectable from "../../../electron-app/on-application-activate.injectable"; -import type { ActivationArgs } from "../../after-application-activation/after-application-activation-injection-token"; +import afterApplicationActivationInjectable from "../../../electron-app/after-application-activation.injectable"; import { afterApplicationActivationInjectionToken } from "../../after-application-activation/after-application-activation-injection-token"; import { afterApplicationIsReadyInjectionToken } from "../after-application-is-ready-injection-token"; @@ -13,14 +12,12 @@ const setupApplicationActivationEventsInjectable = getInjectable({ id: "setup-application-activation-events", instantiate: (di) => { - const onApplicationActivate = di.inject(onApplicationActivateInjectable); - const runRunnablesAfterApplicationActivation = runManyFor(di)(afterApplicationActivationInjectionToken); + const afterApplicationActivation = di.inject(afterApplicationActivationInjectable); + const runRunnables = runManyFor(di)(afterApplicationActivationInjectionToken); return { run: () => { - onApplicationActivate(async (activationArgs: ActivationArgs) => { - await runRunnablesAfterApplicationActivation(activationArgs); - }); + afterApplicationActivation(runRunnables); }, }; }, diff --git a/src/main/start-main-application/after-application-is-ready/implementations/setup-device-shutdown-events.injectable.ts b/src/main/start-main-application/after-application-is-ready/implementations/setup-device-shutdown-events.injectable.ts new file mode 100644 index 0000000000..08d3039722 --- /dev/null +++ b/src/main/start-main-application/after-application-is-ready/implementations/setup-device-shutdown-events.injectable.ts @@ -0,0 +1,28 @@ +/** + * 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 { runManyFor } from "../../run-many-for"; +import { afterApplicationIsReadyInjectionToken } from "../after-application-is-ready-injection-token"; +import beforeDeviceShutdownInjectable from "../../../electron-app/before-device-shutdown.injectable"; +import { beforeDeviceShutdownInjectionToken } from "../../before-device-shutdown/before-device-shutdown-injection-token"; + +const setupDeviceShutdownEventsInjectable = getInjectable({ + id: "setup-device-shutdown-events", + + instantiate: (di) => { + const beforeDeviceShutdown = di.inject(beforeDeviceShutdownInjectable); + const runRunnablesBeforeDeviceShutdown = runManyFor(di)(beforeDeviceShutdownInjectionToken); + + return { + run: () => { + beforeDeviceShutdown(runRunnablesBeforeDeviceShutdown); + }, + }; + }, + + injectionToken: afterApplicationIsReadyInjectionToken, +}); + +export default setupDeviceShutdownEventsInjectable; 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 deleted file mode 100644 index 6e91af588e..0000000000 --- a/src/main/start-main-application/before-application-is-ready/implementations/setup-shutdown-of-application-when-system-shutdowns.injectable.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * 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 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: () => { - whenSystemShutdown(exitApp); - }, - }; - }, - - injectionToken: beforeApplicationIsReadyInjectionToken, -}); - -export default setupShutdownOfApplicationWhenSystemShutdownsInjectable; diff --git a/src/main/start-main-application/before-device-shutdown/before-device-shutdown-injection-token.ts b/src/main/start-main-application/before-device-shutdown/before-device-shutdown-injection-token.ts new file mode 100644 index 0000000000..13f7ece26e --- /dev/null +++ b/src/main/start-main-application/before-device-shutdown/before-device-shutdown-injection-token.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectionToken } from "@ogre-tools/injectable"; +import type { Runnable } from "../run-many-for"; + +export const beforeDeviceShutdownInjectionToken = getInjectionToken({ + id: "before-device-shutdown", +}); diff --git a/src/main/start-main-application/before-device-shutdown/implementations/exit-app-before-shutdown.injectable.ts b/src/main/start-main-application/before-device-shutdown/implementations/exit-app-before-shutdown.injectable.ts new file mode 100644 index 0000000000..8d677a31b9 --- /dev/null +++ b/src/main/start-main-application/before-device-shutdown/implementations/exit-app-before-shutdown.injectable.ts @@ -0,0 +1,25 @@ +/** + * 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 exitAppInjectable from "../../../electron-app/exit-app.injectable"; +import { beforeDeviceShutdownInjectionToken } from "../before-device-shutdown-injection-token"; + +const exitAppBeforeShutdownInjectable = getInjectable({ + id: "exit-app-before-shutdown", + + instantiate: (di) => { + const exitApp = di.inject(exitAppInjectable); + + return { + run: () => { + exitApp(); + }, + }; + }, + + injectionToken: beforeDeviceShutdownInjectionToken, +}); + +export default exitAppBeforeShutdownInjectable;