1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Wait for extensions when doing protocol handler routing (#3159)

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Jari Kolehmainen 2021-06-23 15:48:43 +03:00 committed by GitHub
parent d4c8f04989
commit f8dd7b12f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 12 deletions

View File

@ -30,6 +30,7 @@ import { ExtensionsStore } from "../../extensions/extensions-store";
import { ExtensionLoader } from "../../extensions/extension-loader"; import { ExtensionLoader } from "../../extensions/extension-loader";
import type { LensExtension } from "../../extensions/lens-extension"; import type { LensExtension } from "../../extensions/lens-extension";
import type { RouteHandler, RouteParams } from "../../extensions/registries/protocol-handler"; import type { RouteHandler, RouteParams } from "../../extensions/registries/protocol-handler";
import { when } from "mobx";
// IPC channel for protocol actions. Main broadcasts the open-url events to this channel. // IPC channel for protocol actions. Main broadcasts the open-url events to this channel.
export const ProtocolHandlerIpcPrefix = "protocol-handler"; export const ProtocolHandlerIpcPrefix = "protocol-handler";
@ -178,16 +179,19 @@ export abstract class LensProtocolRouter extends Singleton {
const { [EXTENSION_PUBLISHER_MATCH]: publisher, [EXTENSION_NAME_MATCH]: partialName } = match.params; const { [EXTENSION_PUBLISHER_MATCH]: publisher, [EXTENSION_NAME_MATCH]: partialName } = match.params;
const name = [publisher, partialName].filter(Boolean).join("/"); const name = [publisher, partialName].filter(Boolean).join("/");
const extensionLoader = ExtensionLoader.getInstance();
const extension = ExtensionLoader.getInstance().getInstanceByName(name); try {
await when(() => !!extensionLoader.getInstanceByName(name), { timeout: 5_000 });
if (!extension) { } catch(error) {
logger.info(`${LensProtocolRouter.LoggingPrefix}: Extension ${name} matched, but not installed`); logger.info(`${LensProtocolRouter.LoggingPrefix}: Extension ${name} matched, but not installed (${error})`);
return name; return name;
} }
if (!extension.isBundled && !ExtensionsStore.getInstance().isEnabled(extension.id)) { const extension = extensionLoader.getInstanceByName(name);
if (!ExtensionsStore.getInstance().isEnabled(extension.id)) {
logger.info(`${LensProtocolRouter.LoggingPrefix}: Extension ${name} matched, but not enabled`); logger.info(`${LensProtocolRouter.LoggingPrefix}: Extension ${name} matched, but not enabled`);
return name; return name;

View File

@ -187,10 +187,6 @@ app.on("ready", async () => {
LensProtocolRouterMain.getInstance().rendererLoaded = true; LensProtocolRouterMain.getInstance().rendererLoaded = true;
}); });
ExtensionLoader.getInstance().whenLoaded.then(() => {
LensProtocolRouterMain.getInstance().extensionsLoaded = true;
});
logger.info("🧩 Initializing extensions"); logger.info("🧩 Initializing extensions");
// call after windowManager to see splash earlier // call after windowManager to see splash earlier

View File

@ -44,7 +44,6 @@ describe("protocol router tests", () => {
const lpr = LensProtocolRouterMain.createInstance(); const lpr = LensProtocolRouterMain.createInstance();
lpr.extensionsLoaded = true;
lpr.rendererLoaded = true; lpr.rendererLoaded = true;
}); });

View File

@ -54,7 +54,6 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter {
private missingExtensionHandlers: FallbackHandler[] = []; private missingExtensionHandlers: FallbackHandler[] = [];
@observable rendererLoaded = false; @observable rendererLoaded = false;
@observable extensionsLoaded = false;
protected disposers = disposer(); protected disposers = disposer();
@ -90,7 +89,7 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter {
if (routeInternally) { if (routeInternally) {
this._routeToInternal(url); this._routeToInternal(url);
} else { } else {
this.disposers.push(when(() => this.extensionsLoaded, () => this._routeToExtension(url))); this._routeToExtension(url);
} }
} catch (error) { } catch (error) {
broadcastMessage(ProtocolHandlerInvalid, error.toString(), rawUrl); broadcastMessage(ProtocolHandlerInvalid, error.toString(), rawUrl);