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:
parent
d4c8f04989
commit
f8dd7b12f2
@ -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;
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user