mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Handle protocol events in renderer. Change extId to name in the installation url.
Signed-off-by: Panu Horsmalahti <phorsmalahti@mirantis.com>
This commit is contained in:
parent
cf90044979
commit
6db52e70dd
@ -26,9 +26,8 @@ import { InstalledExtension, extensionDiscovery } from "../extensions/extension-
|
|||||||
import type { LensExtensionId } from "../extensions/lens-extension";
|
import type { LensExtensionId } from "../extensions/lens-extension";
|
||||||
import { installDeveloperTools } from "./developer-tools";
|
import { installDeveloperTools } from "./developer-tools";
|
||||||
import { filesystemProvisionerStore } from "./extension-filesystem";
|
import { filesystemProvisionerStore } from "./extension-filesystem";
|
||||||
import { LensProtocolRouter, RoutingError } from "./protocol-handler";
|
import { lensProtocolChannel } from "./protocol-handler";
|
||||||
import Url from "url-parse";
|
import { broadcastMessage } from "../common/ipc";
|
||||||
|
|
||||||
const workingDir = path.join(app.getPath("appData"), appName);
|
const workingDir = path.join(app.getPath("appData"), appName);
|
||||||
let proxyPort: number;
|
let proxyPort: number;
|
||||||
let proxyServer: LensProxy;
|
let proxyServer: LensProxy;
|
||||||
@ -131,15 +130,8 @@ app
|
|||||||
// protocol handler for macOS
|
// protocol handler for macOS
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
try {
|
// Broadcast "open-url" events to renderer
|
||||||
LensProtocolRouter.getInstance<LensProtocolRouter>().route(Url(rawUrl, true));
|
broadcastMessage(lensProtocolChannel, { rawUrl });
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof RoutingError) {
|
|
||||||
logger.error(`[PROTOCOL ROUTER]: ${error}`, { url: error.url });
|
|
||||||
} else {
|
|
||||||
logger.error(`[PROTOCOL ROUTER]: ${error}`, { rawUrl });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Extensions-api runtime exports
|
// Extensions-api runtime exports
|
||||||
|
|||||||
@ -2,6 +2,8 @@ import { Singleton } from "../../common/utils";
|
|||||||
import Url from "url-parse";
|
import Url from "url-parse";
|
||||||
import { match, matchPath } from "react-router";
|
import { match, matchPath } from "react-router";
|
||||||
import { pathToRegexp } from "path-to-regexp";
|
import { pathToRegexp } from "path-to-regexp";
|
||||||
|
import { subscribeToBroadcast } from "../../common/ipc";
|
||||||
|
import logger from "../logger";
|
||||||
|
|
||||||
export enum RoutingErrorType {
|
export enum RoutingErrorType {
|
||||||
INVALID_PROTOCOL = "invalid-protocol",
|
INVALID_PROTOCOL = "invalid-protocol",
|
||||||
@ -46,6 +48,9 @@ export type ExtensionId = string;
|
|||||||
|
|
||||||
const EXT_ID_MATCH = "LENS_INTERNAL_EXTENSION_ID_MATCH";
|
const EXT_ID_MATCH = "LENS_INTERNAL_EXTENSION_ID_MATCH";
|
||||||
|
|
||||||
|
// IPC channel for protocol actions. Main broadcasts the open-url events to this channel.
|
||||||
|
export const lensProtocolChannel = "protocol-handler";
|
||||||
|
|
||||||
interface ExtensionIdMatch {
|
interface ExtensionIdMatch {
|
||||||
[EXT_ID_MATCH]: string;
|
[EXT_ID_MATCH]: string;
|
||||||
}
|
}
|
||||||
@ -56,6 +61,20 @@ export class LensProtocolRouter extends Singleton {
|
|||||||
|
|
||||||
private static ExtensionIDSchema = `/:${EXT_ID_MATCH}`;
|
private static ExtensionIDSchema = `/:${EXT_ID_MATCH}`;
|
||||||
|
|
||||||
|
public init() {
|
||||||
|
subscribeToBroadcast(lensProtocolChannel, ((_event, { rawUrl }) => {
|
||||||
|
try {
|
||||||
|
this.route(Url(rawUrl, true));
|
||||||
|
} catch (error) {
|
||||||
|
if (error instanceof RoutingError) {
|
||||||
|
logger.error(`[PROTOCOL ROUTER]: ${error}`, { url: error.url });
|
||||||
|
} else {
|
||||||
|
logger.error(`[PROTOCOL ROUTER]: ${error}`, { rawUrl });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* route
|
* route
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -3,14 +3,14 @@ import { RouteParams } from "../../../main/protocol-handler";
|
|||||||
import { installFromNpm } from "../../components/+extensions";
|
import { installFromNpm } from "../../components/+extensions";
|
||||||
|
|
||||||
export async function installExtension(params: RouteParams): Promise<void> {
|
export async function installExtension(params: RouteParams): Promise<void> {
|
||||||
const { extId } = params.search;
|
const { name } = params.search;
|
||||||
|
|
||||||
if (!extId) {
|
if (!name) {
|
||||||
return void logger.info("installExtension handler: missing 'extId' from search params");
|
return void logger.info("installExtension handler: missing 'name' from search params");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await installFromNpm(extId);
|
await installFromNpm(name);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error("[PH - Install Extension]: failed to install from NPM", error);
|
logger.error("[PH - Install Extension]: failed to install from NPM", error);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import { i18nStore } from "./i18n";
|
|||||||
import { LensApp } from "./lens-app";
|
import { LensApp } from "./lens-app";
|
||||||
import { themeStore } from "./theme.store";
|
import { themeStore } from "./theme.store";
|
||||||
import protocolEndpoints from "./api/protocol-endpoints";
|
import protocolEndpoints from "./api/protocol-endpoints";
|
||||||
|
import { LensProtocolRouter } from "../main/protocol-handler";
|
||||||
|
|
||||||
type AppComponent = React.ComponentType & {
|
type AppComponent = React.ComponentType & {
|
||||||
init?(): Promise<void>;
|
init?(): Promise<void>;
|
||||||
@ -37,6 +38,7 @@ export async function bootstrap(App: AppComponent) {
|
|||||||
|
|
||||||
extensionLoader.init();
|
extensionLoader.init();
|
||||||
extensionDiscovery.init();
|
extensionDiscovery.init();
|
||||||
|
LensProtocolRouter.getInstance<LensProtocolRouter>().init();
|
||||||
protocolEndpoints.registerHandlers();
|
protocolEndpoints.registerHandlers();
|
||||||
|
|
||||||
// preload common stores
|
// preload common stores
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user