From 1c422f6ed2b81d7178186f3af0898dc769a1c541 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 20 May 2021 09:40:47 -0400 Subject: [PATCH] Fix kube sync items not visible on reopening (#2815) Signed-off-by: Sebastian Malton Co-authored-by: Jari Kolehmainen --- src/main/catalog-pusher.ts | 33 +++++---------------- src/main/index.ts | 11 ++++--- src/renderer/api/catalog-entity-registry.ts | 3 +- 3 files changed, 15 insertions(+), 32 deletions(-) diff --git a/src/main/catalog-pusher.ts b/src/main/catalog-pusher.ts index c2971017cc..c2d7267b92 100644 --- a/src/main/catalog-pusher.ts +++ b/src/main/catalog-pusher.ts @@ -20,33 +20,14 @@ */ import { reaction, toJS } from "mobx"; -import { broadcastMessage, subscribeToBroadcast, unsubscribeFromBroadcast } from "../common/ipc"; +import { broadcastMessage } from "../common/ipc"; import type { CatalogEntityRegistry} from "./catalog"; import "../common/catalog-entities/kubernetes-cluster"; -import type { Disposer } from "../common/utils"; -export class CatalogPusher { - static init(catalog: CatalogEntityRegistry) { - new CatalogPusher(catalog).init(); - } - - private constructor(private catalog: CatalogEntityRegistry) {} - - init() { - const disposers: Disposer[] = []; - - disposers.push(reaction(() => toJS(this.catalog.items, { recurseEverything: true }), (items) => { - broadcastMessage("catalog:items", items); - }, { - fireImmediately: true, - })); - - const listener = subscribeToBroadcast("catalog:broadcast", () => { - broadcastMessage("catalog:items", toJS(this.catalog.items, { recurseEverything: true })); - }); - - disposers.push(() => unsubscribeFromBroadcast("catalog:broadcast", listener)); - - return disposers; - } +export function pushCatalogToRenderer(catalog: CatalogEntityRegistry) { + return reaction(() => toJS(catalog.items, { recurseEverything: true }), (items) => { + broadcastMessage("catalog:items", items); + }, { + fireImmediately: true, + }); } diff --git a/src/main/index.ts b/src/main/index.ts index d54babde8b..2585b0740e 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -45,11 +45,11 @@ import type { LensExtensionId } from "../extensions/lens-extension"; import { FilesystemProvisionerStore } from "./extension-filesystem"; import { installDeveloperTools } from "./developer-tools"; import { LensProtocolRouterMain } from "./protocol-handler"; -import { getAppVersion, getAppVersionFromProxyServer } from "../common/utils"; +import { disposer, getAppVersion, getAppVersionFromProxyServer } from "../common/utils"; import { bindBroadcastHandlers } from "../common/ipc"; import { startUpdateChecking } from "./app-updater"; import { IpcRendererNavigationEvents } from "../renderer/navigation/events"; -import { CatalogPusher } from "./catalog-pusher"; +import { pushCatalogToRenderer } from "./catalog-pusher"; import { catalogEntityRegistry } from "./catalog"; import { HotbarStore } from "../common/hotbar-store"; import { HelmRepoManager } from "./helm/helm-repo-manager"; @@ -57,6 +57,7 @@ import { KubeconfigSyncManager } from "./catalog-sources"; import { handleWsUpgrade } from "./proxy/ws-upgrade"; const workingDir = path.join(app.getPath("appData"), appName); +const cleanup = disposer(); app.setName(appName); @@ -142,7 +143,7 @@ app.on("ready", async () => { const lensProxy = LensProxy.createInstance(handleWsUpgrade); ClusterManager.createInstance(); - KubeconfigSyncManager.createInstance().startSync(); + KubeconfigSyncManager.createInstance(); try { logger.info("🔌 Starting LensProxy"); @@ -187,7 +188,8 @@ app.on("ready", async () => { } ipcMain.on(IpcRendererNavigationEvents.LOADED, () => { - CatalogPusher.init(catalogEntityRegistry); + cleanup.push(pushCatalogToRenderer(catalogEntityRegistry)); + KubeconfigSyncManager.getInstance().startSync(); startUpdateChecking(); LensProtocolRouterMain .getInstance() @@ -251,6 +253,7 @@ app.on("will-quit", (event) => { appEventBus.emit({name: "app", action: "close"}); ClusterManager.getInstance(false)?.stop(); // close cluster connections KubeconfigSyncManager.getInstance(false)?.stopSync(); + cleanup(); if (blockQuit) { event.preventDefault(); // prevent app's default shutdown (e.g. required for telemetry, etc.) diff --git a/src/renderer/api/catalog-entity-registry.ts b/src/renderer/api/catalog-entity-registry.ts index ac4e6748dc..d6e2059edf 100644 --- a/src/renderer/api/catalog-entity-registry.ts +++ b/src/renderer/api/catalog-entity-registry.ts @@ -20,7 +20,7 @@ */ import { computed, observable } from "mobx"; -import { broadcastMessage, subscribeToBroadcast } from "../../common/ipc"; +import { subscribeToBroadcast } from "../../common/ipc"; import { CatalogCategory, CatalogEntity, CatalogEntityData, catalogCategoryRegistry, CatalogCategoryRegistry, CatalogEntityKindData } from "../../common/catalog"; import "../../common/catalog-entities"; import { iter } from "../utils"; @@ -35,7 +35,6 @@ export class CatalogEntityRegistry { subscribeToBroadcast("catalog:items", (ev, items: (CatalogEntityData & CatalogEntityKindData)[]) => { this.rawItems.replace(items); }); - broadcastMessage("catalog:broadcast"); } set activeEntity(entity: CatalogEntity) {