From 311178f8d7bd038cf5e3c8c5b85c5c16b97095fa Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 9 Feb 2021 16:01:23 -0500 Subject: [PATCH] switch to event emitting renderer being ready Signed-off-by: Sebastian Malton --- src/main/app-updater.ts | 5 +++-- src/main/index.ts | 6 ++++-- src/main/window-manager.ts | 13 +------------ src/renderer/lens-app.tsx | 2 ++ 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/main/app-updater.ts b/src/main/app-updater.ts index 618f714b49..9a3eaa8ae8 100644 --- a/src/main/app-updater.ts +++ b/src/main/app-updater.ts @@ -4,6 +4,7 @@ import { isDevelopment, isTestEnv } from "../common/vars"; import { delay } from "../common/utils"; import { areArgsUpdateAvailableToBackchannel, AutoUpdateLogPrefix, broadcastMessage, onceCorrect, UpdateAvailableChannel, UpdateAvailableToBackchannel } from "../common/ipc"; import { ipcMain } from "electron"; +import { once } from "lodash"; function handleAutoUpdateBackChannel(event: Electron.IpcMainEvent, ...[arg]: UpdateAvailableToBackchannel) { if (arg.doUpdate) { @@ -27,7 +28,7 @@ function handleAutoUpdateBackChannel(event: Electron.IpcMainEvent, ...[arg]: Upd * starts the automatic update checking * @param interval milliseconds between interval to check on, defaults to 24h */ -export function startUpdateChecking(interval = 1000 * 60 * 60 * 24): void { +export const startUpdateChecking = once(function (interval = 1000 * 60 * 60 * 24): void { if (isDevelopment || isTestEnv) { return; } @@ -65,7 +66,7 @@ export function startUpdateChecking(interval = 1000 * 60 * 60 * 24): void { } helper(); -} +}); export async function checkForUpdates(): Promise { try { diff --git a/src/main/index.ts b/src/main/index.ts index 01e31e1eb0..b2a0f18850 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -4,7 +4,7 @@ import "../common/system-ca"; import "../common/prometheus-providers"; import * as Mobx from "mobx"; import * as LensExtensions from "../extensions/core-api"; -import { app, dialog, powerMonitor } from "electron"; +import { app, dialog, ipcMain, powerMonitor } from "electron"; import { appName } from "../common/vars"; import path from "path"; import { LensProxy } from "./lens-proxy"; @@ -146,12 +146,14 @@ app.on("ready", async () => { logger.info("🖥️ Starting WindowManager"); windowManager = WindowManager.getInstance(proxyPort); - windowManager.whenLoaded.then(() => { + + ipcMain.on("renderer:loaded", () => { startUpdateChecking(); LensProtocolRouterMain .getInstance() .rendererLoaded = true; }); + extensionLoader.whenLoaded.then(() => { LensProtocolRouterMain .getInstance() diff --git a/src/main/window-manager.ts b/src/main/window-manager.ts index 6d21aacd6c..691aa7c66b 100644 --- a/src/main/window-manager.ts +++ b/src/main/window-manager.ts @@ -1,5 +1,5 @@ import type { ClusterId } from "../common/cluster-store"; -import { observable, when } from "mobx"; +import { observable } from "mobx"; import { app, BrowserWindow, dialog, shell, webContents } from "electron"; import windowStateKeeper from "electron-window-state"; import { appEventBus } from "../common/event-bus"; @@ -16,16 +16,6 @@ export class WindowManager extends Singleton { protected windowState: windowStateKeeper.State; protected disposers: Record = {}; - /** - * This will transition from `false` -> `true` when the main view has loaded - * the renderer URL and has been shown successfully. - * - * This is useful for waiting until the renderer is ready before trying to - * send requests to it (such as the protocol router) - */ - @observable mainViewInitiallyLoaded = false; - whenLoaded = when(() => this.mainViewInitiallyLoaded); - @observable activeClusterId: ClusterId; constructor(protected proxyPort: number) { @@ -111,7 +101,6 @@ export class WindowManager extends Singleton { setTimeout(() => { appEventBus.emit({ name: "app", action: "start" }); }, 1000); - this.mainViewInitiallyLoaded = true; } catch (err) { dialog.showErrorBox("ERROR!", err.toString()); } diff --git a/src/renderer/lens-app.tsx b/src/renderer/lens-app.tsx index 88a59de91d..30d6cc0c66 100644 --- a/src/renderer/lens-app.tsx +++ b/src/renderer/lens-app.tsx @@ -14,6 +14,7 @@ import { broadcastMessage } from "../common/ipc"; import { CommandContainer } from "./components/command-palette/command-container"; import { LensProtocolRouterRenderer } from "./protocol-handler/router"; import { registerIpcHandlers } from "./ipc"; +import { ipcRenderer } from "electron"; @observer export class LensApp extends React.Component { @@ -28,6 +29,7 @@ export class LensApp extends React.Component { }); registerIpcHandlers(); + ipcRenderer.emit("renderer:loaded"); } render() {