From c0eb4c6dea81927b253add6e1f47b438c2e1269b Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 5 Apr 2023 10:05:19 -0400 Subject: [PATCH] chore: Split setupRunnablesBeforeClosingOfApplication Signed-off-by: Sebastian Malton --- ...iour-on-close-of-last-window.injectable.ts | 37 ++++++++++ ...p-cleanup-of-backend-on-quit.injectable.ts | 43 +++++++++++ ...efore-closing-of-application.injectable.ts | 72 ------------------- packages/core/src/main/getDiForUnitTesting.ts | 2 - 4 files changed, 80 insertions(+), 74 deletions(-) create mode 100644 packages/core/src/main/electron-app/runnables/setup-behaviour-on-close-of-last-window.injectable.ts create mode 100644 packages/core/src/main/electron-app/runnables/setup-cleanup-of-backend-on-quit.injectable.ts delete mode 100644 packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts diff --git a/packages/core/src/main/electron-app/runnables/setup-behaviour-on-close-of-last-window.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-behaviour-on-close-of-last-window.injectable.ts new file mode 100644 index 0000000000..8e7754b6e5 --- /dev/null +++ b/packages/core/src/main/electron-app/runnables/setup-behaviour-on-close-of-last-window.injectable.ts @@ -0,0 +1,37 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; +import { runManySyncFor } from "@k8slens/run-many"; +import { getInjectable } from "@ogre-tools/injectable"; +import isIntegrationTestingInjectable from "../../../common/vars/is-integration-testing.injectable"; +import { afterQuitOfFrontEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; +import electronAppInjectable from "../electron-app.injectable"; +import isAutoUpdatingInjectable from "../features/is-auto-updating.injectable"; + +const setupBehaviourOnCloseOfLastWindowInjectable = getInjectable({ + id: "setup-behaviour-on-close-of-last-window", + instantiate: (di) => ({ + run: () => { + const runManySync = runManySyncFor(di); + const runAfterQuitOfFrontEnd = runManySync(afterQuitOfFrontEndInjectionToken); + const app = di.inject(electronAppInjectable); + const isIntegrationTesting = di.inject(isIntegrationTestingInjectable); + const isAutoUpdating = di.inject(isAutoUpdatingInjectable); + + app.on("window-all-closed", () => { + runAfterQuitOfFrontEnd(); + + if (isIntegrationTesting || isAutoUpdating.get()) { + app.quit(); + } + }); + + return undefined; + }, + }), + injectionToken: beforeElectronIsReadyInjectionToken, +}); + +export default setupBehaviourOnCloseOfLastWindowInjectable; diff --git a/packages/core/src/main/electron-app/runnables/setup-cleanup-of-backend-on-quit.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-cleanup-of-backend-on-quit.injectable.ts new file mode 100644 index 0000000000..eb4be16039 --- /dev/null +++ b/packages/core/src/main/electron-app/runnables/setup-cleanup-of-backend-on-quit.injectable.ts @@ -0,0 +1,43 @@ +/** + * 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 { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; +import { onQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; +import electronAppInjectable from "../electron-app.injectable"; +import { runManyFor } from "@k8slens/run-many"; +import { once } from "lodash"; + +const setupCleanupOfBackendOnQuitInjectable = getInjectable({ + id: "setup-cleanup-of-backend-on-quit", + + instantiate: (di) => ({ + run: () => { + const runMany = runManyFor(di); + const runOnQuitOfBackEnd = runMany(onQuitOfBackEndInjectionToken); + const app = di.inject(electronAppInjectable); + + const doAsyncQuit = once(() => void (async () => { + try { + await runOnQuitOfBackEnd(); + app.exit(0); + } catch (error) { + console.error("A beforeQuitOfBackEnd failed!!!!", error); + app.exit(1); + } + })()); + + app.on("will-quit", (event) => { + event.preventDefault(); + doAsyncQuit(); + }); + + return undefined; + }, + }), + + injectionToken: beforeElectronIsReadyInjectionToken, +}); + +export default setupCleanupOfBackendOnQuitInjectable; diff --git a/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts deleted file mode 100644 index 7c53690143..0000000000 --- a/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts +++ /dev/null @@ -1,72 +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 { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; -import { afterQuitOfFrontEndInjectionToken, onQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; -import electronAppInjectable from "../electron-app.injectable"; -import isIntegrationTestingInjectable from "../../../common/vars/is-integration-testing.injectable"; -import { runManySyncFor, runManyFor } from "@k8slens/run-many"; -import isAutoUpdatingInjectable from "../features/is-auto-updating.injectable"; - -const setupRunnablesBeforeClosingOfApplicationInjectable = getInjectable({ - id: "setup-closing-of-application", - - instantiate: (di) => ({ - run: () => { - const runManySync = runManySyncFor(di); - const runMany = runManyFor(di); - const runAfterQuitOfFrontEnd = runManySync(afterQuitOfFrontEndInjectionToken); - const runOnQuitOfBackEnd = runMany(onQuitOfBackEndInjectionToken); - const app = di.inject(electronAppInjectable); - const isIntegrationTesting = di.inject(isIntegrationTestingInjectable); - const isAutoUpdating = di.inject(isAutoUpdatingInjectable); - - app.on("will-quit", () => { - runAfterQuitOfFrontEnd(); - - let isAsyncQuitting = false; - - const doAsyncQuit = (event: Electron.Event, exitCode = 0) => { - if (isAsyncQuitting) { - return; - } - - isAsyncQuitting = true; - - void (async () => { - try { - await runOnQuitOfBackEnd(); - } catch (error) { - console.error("A beforeQuitOfBackEnd failed!!!!", error); - exitCode = 1; - } - - app.exit(exitCode); - })(); - }; - - app.on("will-quit", (event) => { - runAfterQuitOfFrontEnd(); - event.preventDefault(); - - if (isIntegrationTesting || isAutoUpdating.get()) { - doAsyncQuit(event); - } - }); - - app.on("quit", (event, exitCode) => { - event.preventDefault(); - doAsyncQuit(event, exitCode); - }); - }); - - return undefined; - }, - }), - - injectionToken: beforeElectronIsReadyInjectionToken, -}); - -export default setupRunnablesBeforeClosingOfApplicationInjectable; diff --git a/packages/core/src/main/getDiForUnitTesting.ts b/packages/core/src/main/getDiForUnitTesting.ts index 83b3aa6d82..d4a1cc48a7 100644 --- a/packages/core/src/main/getDiForUnitTesting.ts +++ b/packages/core/src/main/getDiForUnitTesting.ts @@ -15,7 +15,6 @@ import setupDeepLinkingInjectable from "./electron-app/runnables/setup-deep-link import setupMainWindowVisibilityAfterActivationInjectable from "./electron-app/runnables/setup-main-window-visibility-after-activation.injectable"; import setupDeviceShutdownInjectable from "./electron-app/runnables/setup-device-shutdown.injectable"; import setupApplicationNameInjectable from "./electron-app/runnables/setup-application-name.injectable"; -import setupRunnablesBeforeClosingOfApplicationInjectable from "./electron-app/runnables/setup-runnables-before-closing-of-application.injectable"; import { runInAction } from "mobx"; import broadcastMessageInjectable from "../common/ipc/broadcast-message.injectable"; import electronQuitAndInstallUpdateInjectable from "./electron-app/features/electron-quit-and-install-update.injectable"; @@ -104,7 +103,6 @@ const overrideElectronFeatures = (di: DiContainer) => { setupDeviceShutdownInjectable, setupDeepLinkingInjectable, setupApplicationNameInjectable, - setupRunnablesBeforeClosingOfApplicationInjectable, ].forEach((injectable) => { di.override(injectable, () => ({ id: injectable.id,