From 705247570312c834dd47ccf568d69773178db3ed Mon Sep 17 00:00:00 2001 From: Panu Horsmalahti Date: Thu, 10 Dec 2020 10:44:23 +0200 Subject: [PATCH] Fix circular dependency. Fix waiting for instance enabled. Signed-off-by: Panu Horsmalahti --- src/extensions/extension-loader.ts | 14 ++++++++++++-- src/main/protocol-handler/router.ts | 4 ---- src/renderer/bootstrap.tsx | 5 +++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index aed6d7734e..d1db45303d 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -301,8 +301,18 @@ export class ExtensionLoader { return this.extensions.get(extId); } - public async instanceToBeEnabled(extId: LensExtensionId): Promise { - return when(() => this.instances.get(extId)?.isEnabled); + public async waitForEnabled(name: string): Promise { + return when(() => { + for (const instanceEntry of this.instances) { + const [, extension ] = instanceEntry; + + if (extension.manifest.name === name) { + return extension.isEnabled; + } + } + + return false; + }); } /** diff --git a/src/main/protocol-handler/router.ts b/src/main/protocol-handler/router.ts index 8bd9900e08..3030829f36 100644 --- a/src/main/protocol-handler/router.ts +++ b/src/main/protocol-handler/router.ts @@ -4,8 +4,6 @@ import { match, matchPath } from "react-router"; import { pathToRegexp } from "path-to-regexp"; import { subscribeToBroadcast } from "../../common/ipc"; import logger from "../logger"; -import { extensionLoader } from "../../extensions/extension-loader"; -import { sanitizeExtensionName } from "../../extensions/lens-extension"; export enum RoutingErrorType { INVALID_PROTOCOL = "invalid-protocol", @@ -119,13 +117,11 @@ export class LensProtocolRouter extends Singleton { if (!routes) { if (this.missingExtensionHandler) { - const enabledPromise = extensionLoader.instanceToBeEnabled(sanitizeExtensionName(name)); if (!await this.missingExtensionHandler(name)) { return; } - await enabledPromise; routes = this.extentionRoutes.get(name); if (!routes) { diff --git a/src/renderer/bootstrap.tsx b/src/renderer/bootstrap.tsx index e4d9d99251..e3859eb286 100644 --- a/src/renderer/bootstrap.tsx +++ b/src/renderer/bootstrap.tsx @@ -21,7 +21,6 @@ import protocolEndpoints from "./api/protocol-endpoints"; import { LensProtocolRouter } from "../main/protocol-handler"; import logger from "../main/logger"; import { installFromNpm } from "./components/+extensions"; - type AppComponent = React.ComponentType & { init?(): Promise; }; @@ -47,7 +46,9 @@ export async function bootstrap(App: AppComponent) { if (!extensionLoader.isInstalled(name)) { logger.info(`[PROTOCOL ROUTER]: Extension ${name} not installed, installing..`); - await installFromNpm(name); + await Promise.all([installFromNpm(name), extensionLoader.waitForEnabled(name)]); + + logger.info(`[PROTOCOL ROUTER]: Extension ${name} installed and enabled.`); return true; } else {