From 00325229f4e8fa7d9a90929e9011bf1d89f59c9c Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 27 Apr 2022 11:21:03 +0300 Subject: [PATCH] Reimplement setup for application quit using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- .../emit-close-to-command-bus.injectable.ts | 25 +++++++++++++ ...ter-not-have-loaded-renderer.injectable.ts | 27 ++++++++++++++ ...lean-up-protocol-router-main.injectable.ts | 25 +++++++++++++ .../clean-up-shell-sessions.injectable.ts | 21 +++++++++++ .../quit-application.injectable.ts | 37 +++++++++++++++++++ .../stop-cluster-manager.injectable.ts | 27 ++++++++++++++ .../stop-kube-config-sync.injectable.ts | 25 +++++++++++++ 7 files changed, 187 insertions(+) create mode 100644 src/main/start-main-application/on-application-close/implementations/emit-close-to-command-bus.injectable.ts create mode 100644 src/main/start-main-application/on-application-close/implementations/make-protocol-router-not-have-loaded-renderer.injectable.ts create mode 100644 src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-protocol-router-main.injectable.ts create mode 100644 src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-shell-sessions.injectable.ts create mode 100644 src/main/start-main-application/on-application-close/implementations/quit-application/quit-application.injectable.ts create mode 100644 src/main/start-main-application/on-application-close/implementations/stop-cluster-manager.injectable.ts create mode 100644 src/main/start-main-application/on-application-close/implementations/stop-kube-config-sync.injectable.ts diff --git a/src/main/start-main-application/on-application-close/implementations/emit-close-to-command-bus.injectable.ts b/src/main/start-main-application/on-application-close/implementations/emit-close-to-command-bus.injectable.ts new file mode 100644 index 0000000000..f585cf09c8 --- /dev/null +++ b/src/main/start-main-application/on-application-close/implementations/emit-close-to-command-bus.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 appEventBusInjectable from "../../../../common/app-event-bus/app-event-bus.injectable"; +import { onApplicationCloseInjectionToken } from "../on-application-close-injection-token"; + +const emitCloseToCommandBusInjectable = getInjectable({ + id: "emit-close-to-command-bus", + + instantiate: (di) => { + const appEventBus = di.inject(appEventBusInjectable); + + return { + run: () => { + appEventBus.emit({ name: "app", action: "close" }); + }, + }; + }, + + injectionToken: onApplicationCloseInjectionToken, +}); + +export default emitCloseToCommandBusInjectable; diff --git a/src/main/start-main-application/on-application-close/implementations/make-protocol-router-not-have-loaded-renderer.injectable.ts b/src/main/start-main-application/on-application-close/implementations/make-protocol-router-not-have-loaded-renderer.injectable.ts new file mode 100644 index 0000000000..d2bf06fd9a --- /dev/null +++ b/src/main/start-main-application/on-application-close/implementations/make-protocol-router-not-have-loaded-renderer.injectable.ts @@ -0,0 +1,27 @@ +/** + * 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 lensProtocolRouterMainInjectable from "../../../protocol-handler/lens-protocol-router-main/lens-protocol-router-main.injectable"; +import { onApplicationCloseInjectionToken } from "../on-application-close-injection-token"; + +const makeProtocolRouterNotHaveLoadedRendererInjectable = getInjectable({ + id: "make-protocol-router-not-have-loaded-renderer", + + instantiate: (di) => { + const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); + + return { + run: () => { + // This is set to false here so that LPRM can wait to send future lens:// + // requests until after it loads again + lensProtocolRouterMain.rendererLoaded = false; + }, + }; + }, + + injectionToken: onApplicationCloseInjectionToken, +}); + +export default makeProtocolRouterNotHaveLoadedRendererInjectable; diff --git a/src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-protocol-router-main.injectable.ts b/src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-protocol-router-main.injectable.ts new file mode 100644 index 0000000000..1eecef0d43 --- /dev/null +++ b/src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-protocol-router-main.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 { onApplicationQuitInjectionToken } from "../on-application-quit-injection-token"; +import lensProtocolRouterMainInjectable from "../../../../../../protocol-handler/lens-protocol-router-main/lens-protocol-router-main.injectable"; + +const cleanUpProtocolRouterMainInjectable = getInjectable({ + id: "clean-up-protocol-router-main", + + instantiate: (di) => { + const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); + + return { + run: () => { + lensProtocolRouterMain.cleanup(); + }, + }; + }, + + injectionToken: onApplicationQuitInjectionToken, +}); + +export default cleanUpProtocolRouterMainInjectable; diff --git a/src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-shell-sessions.injectable.ts b/src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-shell-sessions.injectable.ts new file mode 100644 index 0000000000..ac1f05ae2d --- /dev/null +++ b/src/main/start-main-application/on-application-close/implementations/quit-application/on-application-quit/implementations/clean-up-shell-sessions.injectable.ts @@ -0,0 +1,21 @@ +/** + * 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 { onApplicationQuitInjectionToken } from "../on-application-quit-injection-token"; +import { ShellSession } from "../../../../../../shell-session/shell-session"; + +const cleanUpShellSessionsInjectable = getInjectable({ + id: "clean-up-shell-sessions", + + instantiate: () => ({ + run: () => { + ShellSession.cleanup(); + }, + }), + + injectionToken: onApplicationQuitInjectionToken, +}); + +export default cleanUpShellSessionsInjectable; diff --git a/src/main/start-main-application/on-application-close/implementations/quit-application/quit-application.injectable.ts b/src/main/start-main-application/on-application-close/implementations/quit-application/quit-application.injectable.ts new file mode 100644 index 0000000000..4348f3789d --- /dev/null +++ b/src/main/start-main-application/on-application-close/implementations/quit-application/quit-application.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 { getInjectable } from "@ogre-tools/injectable"; +import { onApplicationQuitInjectionToken } from "./on-application-quit/on-application-quit-injection-token"; +import { isIntegrationTesting } from "../../../../../common/vars"; +import { runManyFor } from "../../../run-many-for"; +import { onApplicationCloseInjectionToken } from "../../on-application-close-injection-token"; + +const quitApplicationInjectable = getInjectable({ + id: "prevent-application-from-closing-involuntarily", + + instantiate: (di) => { + const runMany = runManyFor(di); + const runOnApplicationQuit = runMany(onApplicationQuitInjectionToken); + + return { + run: async ({ event }) => { + if (!isIntegrationTesting) { + // &&!autoUpdateIsRunning) { + event.preventDefault(); + + return; + } + + await runOnApplicationQuit({ event }); + }, + }; + }, + + causesSideEffects: true, + + injectionToken: onApplicationCloseInjectionToken, +}); + +export default quitApplicationInjectable; diff --git a/src/main/start-main-application/on-application-close/implementations/stop-cluster-manager.injectable.ts b/src/main/start-main-application/on-application-close/implementations/stop-cluster-manager.injectable.ts new file mode 100644 index 0000000000..ca2f70d0bf --- /dev/null +++ b/src/main/start-main-application/on-application-close/implementations/stop-cluster-manager.injectable.ts @@ -0,0 +1,27 @@ +/** + * 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 clusterManagerInjectable from "../../../cluster-manager.injectable"; +import { onApplicationCloseInjectionToken } from "../on-application-close-injection-token"; + +const stopClusterManagerInjectable = getInjectable({ + id: "stop-cluster-manager", + + instantiate: (di) => { + const clusterManager = di.inject(clusterManagerInjectable); + + return { + run: () => { + clusterManager.stop(); // close cluster connections + }, + }; + }, + + injectionToken: onApplicationCloseInjectionToken, + + causesSideEffects: true, +}); + +export default stopClusterManagerInjectable; diff --git a/src/main/start-main-application/on-application-close/implementations/stop-kube-config-sync.injectable.ts b/src/main/start-main-application/on-application-close/implementations/stop-kube-config-sync.injectable.ts new file mode 100644 index 0000000000..e8852d4b73 --- /dev/null +++ b/src/main/start-main-application/on-application-close/implementations/stop-kube-config-sync.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 kubeconfigSyncManagerInjectable from "../../../catalog-sources/kubeconfig-sync-manager/kubeconfig-sync-manager.injectable"; +import { onApplicationCloseInjectionToken } from "../on-application-close-injection-token"; + +const stopKubeConfigSyncInjectable = getInjectable({ + id: "stop-kube-config-sync", + + instantiate: (di) => { + const kubeConfigSyncManager = di.inject(kubeconfigSyncManagerInjectable); + + return { + run: () => { + kubeConfigSyncManager.stopSync(); + }, + }; + }, + + injectionToken: onApplicationCloseInjectionToken, +}); + +export default stopKubeConfigSyncInjectable;