From 6ab70aef22ff2a50c2656e9af1e17ca7327c0f94 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 13 Apr 2022 10:26:37 +0300 Subject: [PATCH] Extract responsibilities from electron Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- .../utils/environment-variables.injectable.ts | 13 +++++++++ ...isable-hardware-acceleration.injectable.ts | 20 +++++++++++++ .../register-file-protocol.injectable.ts | 28 +++++++++++++++++++ .../setup-file-protocol.injectable.ts | 19 +++++++------ .../setup-hardware-acceleration.injectable.ts | 14 +++++----- 5 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 src/common/utils/environment-variables.injectable.ts create mode 100644 src/main/electron-app/disable-hardware-acceleration.injectable.ts create mode 100644 src/main/electron-app/register-file-protocol.injectable.ts diff --git a/src/common/utils/environment-variables.injectable.ts b/src/common/utils/environment-variables.injectable.ts new file mode 100644 index 0000000000..c8633be4a3 --- /dev/null +++ b/src/common/utils/environment-variables.injectable.ts @@ -0,0 +1,13 @@ +/** + * 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"; + +const environmentVariablesInjectable = getInjectable({ + id: "environment-variables", + instantiate: () => process.env, + causesSideEffects: true, +}); + +export default environmentVariablesInjectable; diff --git a/src/main/electron-app/disable-hardware-acceleration.injectable.ts b/src/main/electron-app/disable-hardware-acceleration.injectable.ts new file mode 100644 index 0000000000..43db7b6567 --- /dev/null +++ b/src/main/electron-app/disable-hardware-acceleration.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 disableHardwareAccelerationInjectable = getInjectable({ + id: "disable-hardware-acceleration", + + instantiate: (di) => { + const app = di.inject(electronAppInjectable); + + return () => { + app.disableHardwareAcceleration(); + }; + }, +}); + +export default disableHardwareAccelerationInjectable; diff --git a/src/main/electron-app/register-file-protocol.injectable.ts b/src/main/electron-app/register-file-protocol.injectable.ts new file mode 100644 index 0000000000..64f164528d --- /dev/null +++ b/src/main/electron-app/register-file-protocol.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 { protocol } from "electron"; +import getAbsolutePathInjectable from "../../common/path/get-absolute-path.injectable"; + +const registerFileProtocolInjectable = getInjectable({ + id: "register-file-protocol", + + instantiate: (di) => { + const getAbsolutePath = di.inject(getAbsolutePathInjectable); + + return (name: string, basePath: string) => { + protocol.registerFileProtocol(name, (request, callback) => { + const filePath = request.url.replace(`${name}://`, ""); + const absPath = getAbsolutePath(basePath, filePath); + + callback({ path: absPath }); + }); + }; + }, + + causesSideEffects: true, +}); + +export default registerFileProtocolInjectable; diff --git a/src/main/start-main-application/after-application-is-ready/implementations/setup-file-protocol.injectable.ts b/src/main/start-main-application/after-application-is-ready/implementations/setup-file-protocol.injectable.ts index f2b4d83b63..976112b6ce 100644 --- a/src/main/start-main-application/after-application-is-ready/implementations/setup-file-protocol.injectable.ts +++ b/src/main/start-main-application/after-application-is-ready/implementations/setup-file-protocol.injectable.ts @@ -4,22 +4,25 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { afterApplicationIsReadyInjectionToken } from "../after-application-is-ready-injection-token"; -import { registerFileProtocol } from "../../../../common/register-protocol"; +import registerFileProtocolInjectable from "../../../electron-app/register-file-protocol.injectable"; // TODO: Remove side effect on import defining __static import "../../../../common/vars"; +import staticDirInjectable from "../../../../common/vars/static-dir.injectable"; const setupFileProtocolInjectable = getInjectable({ - id: "setup-file-protocol", - instantiate: () => ({ - run: () => { - registerFileProtocol("static", __static); - }, - }), + instantiate: (di) => { + const registerFileProtocol = di.inject(registerFileProtocolInjectable); + const staticDir = di.inject(staticDirInjectable); - causesSideEffects: true, + return { + run: () => { + registerFileProtocol("static", staticDir); + }, + }; + }, injectionToken: afterApplicationIsReadyInjectionToken, }); diff --git a/src/main/start-main-application/after-application-is-ready/implementations/setup-hardware-acceleration.injectable.ts b/src/main/start-main-application/after-application-is-ready/implementations/setup-hardware-acceleration.injectable.ts index 1d81316c97..aef83acb27 100644 --- a/src/main/start-main-application/after-application-is-ready/implementations/setup-hardware-acceleration.injectable.ts +++ b/src/main/start-main-application/after-application-is-ready/implementations/setup-hardware-acceleration.injectable.ts @@ -4,25 +4,25 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { afterApplicationIsReadyInjectionToken } from "../after-application-is-ready-injection-token"; -import electronAppInjectable from "../../../electron-app/electron-app.injectable"; +import environmentVariablesInjectable from "../../../../common/utils/environment-variables.injectable"; +import disableHardwareAccelerationInjectable from "../../../electron-app/disable-hardware-acceleration.injectable"; const setupHardwareAccelerationInjectable = getInjectable({ id: "setup-hardware-acceleration", instantiate: (di) => { - const app = di.inject(electronAppInjectable); + const { LENS_DISABLE_GPU: hardwareAccelerationShouldBeDisabled } = di.inject(environmentVariablesInjectable); + const disableHardwareAcceleration = di.inject(disableHardwareAccelerationInjectable); return { - run: async () => { - if (process.env.LENS_DISABLE_GPU) { - app.disableHardwareAcceleration(); + run: () => { + if (hardwareAccelerationShouldBeDisabled) { + disableHardwareAcceleration(); } }, }; }, - causesSideEffects: true, - injectionToken: afterApplicationIsReadyInjectionToken, });