mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
reintroduce renderer routing
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
6c4c2b714b
commit
4a98d9717d
@ -27,8 +27,6 @@ export class RoutingError extends Error {
|
||||
return "invalid protocol";
|
||||
case RoutingErrorType.INVALID_PATHNAME:
|
||||
return "invalid pathname";
|
||||
case RoutingErrorType.NO_HANDLER:
|
||||
return "no handler";
|
||||
case RoutingErrorType.NO_EXTENSION_ID:
|
||||
return "no extension ID";
|
||||
case RoutingErrorType.MISSING_EXTENSION:
|
||||
|
||||
@ -110,11 +110,17 @@ export abstract class LensProtocolRouter extends Singleton {
|
||||
* @param routes the array of (path schemas, handler) paris to match against
|
||||
* @param url the url (in its current state)
|
||||
*/
|
||||
protected _route(routes: [string, RouteHandler][], url: Url): void {
|
||||
protected _route(routes: [string, RouteHandler][], url: Url, extensionName?: string): void {
|
||||
const route = this._findMatchingRoute(routes, url);
|
||||
|
||||
if (!route) {
|
||||
throw new RoutingError(RoutingErrorType.NO_HANDLER, url);
|
||||
const data: Record<string, string> = { url: url.toString() };
|
||||
|
||||
if (extensionName) {
|
||||
data.extensionName = extensionName;
|
||||
}
|
||||
|
||||
return void logger.info(`${LensProtocolRouter.LoggingPrefix}: No handler found`, data);
|
||||
}
|
||||
|
||||
const [match, handler] = route;
|
||||
@ -198,7 +204,7 @@ export abstract class LensProtocolRouter extends Singleton {
|
||||
.map<[string, RouteHandler]>(({ pathSchema, handler }) => [pathSchema, handler]);
|
||||
|
||||
try {
|
||||
this._route(handlers, url);
|
||||
this._route(handlers, url, extension.name);
|
||||
} catch (error) {
|
||||
if (error instanceof RoutingError) {
|
||||
error.extensionName = extension.name;
|
||||
|
||||
@ -70,12 +70,16 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter {
|
||||
}
|
||||
|
||||
protected _routeToInternal(url: Url): void {
|
||||
const rawUrl = url.toString(); // for sending to renderer
|
||||
|
||||
super._routeToInternal(url);
|
||||
|
||||
broadcastMessage(proto.ProtocolHandlerInternal, url);
|
||||
broadcastMessage(proto.ProtocolHandlerInternal, rawUrl);
|
||||
}
|
||||
|
||||
protected async _routeToExtension(url: Url): Promise<void> {
|
||||
const rawUrl = url.toString(); // for sending to renderer
|
||||
|
||||
/**
|
||||
* This needs to be done first, so that the missing extension handlers can
|
||||
* be called before notifying the renderer.
|
||||
@ -85,7 +89,7 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter {
|
||||
*/
|
||||
await super._routeToExtension(new Url(url.toString(), true));
|
||||
|
||||
broadcastMessage(proto.ProtocolHandlerExtension, url);
|
||||
broadcastMessage(proto.ProtocolHandlerExtension, rawUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -12,11 +12,13 @@ import { ConfirmDialog } from "./components/confirm-dialog";
|
||||
import { extensionLoader } from "../extensions/extension-loader";
|
||||
import { broadcastMessage } from "../common/ipc";
|
||||
import { CommandContainer } from "./components/command-palette/command-container";
|
||||
import { LensProtocolRouterRenderer } from "./protocol-handler/router";
|
||||
|
||||
@observer
|
||||
export class LensApp extends React.Component {
|
||||
static async init() {
|
||||
extensionLoader.loadOnClusterManagerRenderer();
|
||||
LensProtocolRouterRenderer.getInstance<LensProtocolRouterRenderer>().init();
|
||||
window.addEventListener("offline", () => {
|
||||
broadcastMessage("network:offline");
|
||||
});
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
import { ipcRenderer } from "electron";
|
||||
import * as proto from "../../common/protocol-handler";
|
||||
import logger from "../../main/logger";
|
||||
import Url from "url-parse";
|
||||
import { autobind } from "../utils";
|
||||
|
||||
export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
||||
/**
|
||||
* This function is needed to be called early on in the renderers lifetime.
|
||||
@ -11,19 +14,27 @@ export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
||||
.on(proto.ProtocolHandlerExtension, this.ipcExtensionHandler);
|
||||
}
|
||||
|
||||
@autobind()
|
||||
private ipcInternalHandler(event: Electron.IpcRendererEvent, ...args: any[]): void {
|
||||
if (args.length !== 1) {
|
||||
return void logger.warn(`${proto.LensProtocolRouter.LoggingPrefix}: unexpected number of args`, { args });
|
||||
}
|
||||
|
||||
console.log(args[0]);
|
||||
const [rawUrl] = args;
|
||||
const url = new Url(rawUrl, true);
|
||||
|
||||
this._routeToInternal(url);
|
||||
}
|
||||
|
||||
@autobind()
|
||||
private ipcExtensionHandler(event: Electron.IpcRendererEvent, ...args: any[]): void {
|
||||
if (args.length !== 1) {
|
||||
return void logger.warn(`${proto.LensProtocolRouter.LoggingPrefix}: unexpected number of args`, { args });
|
||||
}
|
||||
|
||||
console.log(args[0]);
|
||||
const [rawUrl] = args;
|
||||
const url = new Url(rawUrl, true);
|
||||
|
||||
this._routeToExtension(url);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user