diff --git a/src/common/cluster-store.ts b/src/common/cluster-store.ts index 8e8940c644..26806ae239 100644 --- a/src/common/cluster-store.ts +++ b/src/common/cluster-store.ts @@ -40,7 +40,6 @@ export class ClusterStore extends BaseStore { private static StateChannel = "cluster:state"; clusters = observable.map(); - removedClusters = observable.map(); protected disposer = disposer(); @@ -144,7 +143,6 @@ export class ClusterStore extends BaseStore { protected fromStore({ clusters = [] }: ClusterStoreModel = {}) { const currentClusters = new Map(this.clusters); const newClusters = new Map(); - const removedClusters = new Map(); // update new clusters for (const clusterModel of clusters) { @@ -162,15 +160,7 @@ export class ClusterStore extends BaseStore { } } - // update removed clusters - currentClusters.forEach(cluster => { - if (!newClusters.has(cluster.id)) { - removedClusters.set(cluster.id, cluster); - } - }); - this.clusters.replace(newClusters); - this.removedClusters.replace(removedClusters); } toJSON(): ClusterStoreModel { diff --git a/src/main/cluster-manager.ts b/src/main/cluster-manager.ts index 8cd6664b6a..c082bc78c9 100644 --- a/src/main/cluster-manager.ts +++ b/src/main/cluster-manager.ts @@ -21,7 +21,7 @@ import "../common/cluster-ipc"; import type http from "http"; -import { action, autorun, makeObservable, observable, observe, reaction, toJS } from "mobx"; +import { action, makeObservable, observable, observe, reaction, toJS } from "mobx"; import { Cluster } from "./cluster"; import logger from "./logger"; import { apiKubePrefix } from "../common/vars"; @@ -71,21 +71,6 @@ export class ClusterManager extends Singleton { } }); - // auto-stop removed clusters - autorun(() => { - const removedClusters = Array.from(this.store.removedClusters.values()); - - if (removedClusters.length > 0) { - const meta = removedClusters.map(cluster => cluster.getMeta()); - - logger.info(`${logPrefix} removing clusters`, meta); - removedClusters.forEach(cluster => cluster.disconnect()); - this.store.removedClusters.clear(); - } - }, { - delay: 250 - }); - ipcMainOn("network:offline", this.onNetworkOffline); ipcMainOn("network:online", this.onNetworkOnline); }); diff --git a/src/main/initializers/ipc.ts b/src/main/initializers/ipc.ts index 0eb36b4f3a..c16c3e1fe1 100644 --- a/src/main/initializers/ipc.ts +++ b/src/main/initializers/ipc.ts @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { BrowserWindow, dialog, IpcMainInvokeEvent } from "electron"; +import { app, BrowserWindow, dialog, IpcMainInvokeEvent } from "electron"; import { KubernetesCluster } from "../../common/catalog-entities"; import { clusterFrameMap } from "../../common/cluster-frames"; import { clusterActivateHandler, clusterSetFrameIdHandler, clusterVisibilityHandler, clusterRefreshHandler, clusterDisconnectHandler, clusterKubectlApplyAllHandler, clusterKubectlDeleteAllHandler, clusterDeleteHandler, clusterSetDeletingHandler, clusterClearDeletingHandler } from "../../common/cluster-ipc"; @@ -32,6 +32,8 @@ import { pushCatalogToRenderer } from "../catalog-pusher"; import { ClusterManager } from "../cluster-manager"; import { ResourceApplier } from "../resource-applier"; import { WindowManager } from "../window-manager"; +import path from "path"; +import { remove } from "fs-extra"; export function initIpcMainHandlers() { ipcMainHandle(clusterActivateHandler, (event, clusterId: ClusterId, force = false) => { @@ -79,9 +81,11 @@ export function initIpcMainHandlers() { } }); - ipcMainHandle(clusterDeleteHandler, (event, clusterId: ClusterId) => { + ipcMainHandle(clusterDeleteHandler, async (event, clusterId: ClusterId) => { appEventBus.emit({ name: "cluster", action: "remove" }); - const cluster = ClusterStore.getInstance().getById(clusterId); + + const clusterStore = ClusterStore.getInstance(); + const cluster = clusterStore.getById(clusterId); if (!cluster) { return; @@ -89,6 +93,16 @@ export function initIpcMainHandlers() { cluster.disconnect(); clusterFrameMap.delete(cluster.id); + + // Remove from the cluster store as well, this should clear any old settings + clusterStore.clusters.delete(cluster.id); + + try { + // remove the local storage file + const localStorageFilePath = path.resolve(app.getPath("userData"), "lens-local-storage", `${cluster.id}.json`); + + await remove(localStorageFilePath); + } catch {} }); ipcMainHandle(clusterSetDeletingHandler, (event, clusterId: string) => { diff --git a/src/renderer/components/delete-cluster-dialog/delete-cluster-dialog.tsx b/src/renderer/components/delete-cluster-dialog/delete-cluster-dialog.tsx index 01cf35eec8..94ad6c79bd 100644 --- a/src/renderer/components/delete-cluster-dialog/delete-cluster-dialog.tsx +++ b/src/renderer/components/delete-cluster-dialog/delete-cluster-dialog.tsx @@ -116,6 +116,7 @@ export class DeleteClusterDialog extends React.Component { await requestMain(clusterDeleteHandler, cluster.id); } catch(error) { Notifications.error(`Cannot remove cluster, failed to process config file. ${error}`); + } finally { await requestMain(clusterClearDeletingHandler, cluster.id); } diff --git a/src/renderer/utils/createStorage.ts b/src/renderer/utils/createStorage.ts index 2e79e35209..e2ff3dc314 100755 --- a/src/renderer/utils/createStorage.ts +++ b/src/renderer/utils/createStorage.ts @@ -25,7 +25,6 @@ import path from "path"; import { comparer, observable, reaction, toJS, when } from "mobx"; import fse from "fs-extra"; import { StorageHelper } from "./storageHelper"; -import { ClusterStore } from "../../common/cluster-store"; import logger from "../../main/logger"; import { getHostedClusterId, getPath } from "../../common/utils"; import { isTestEnv } from "../../common/vars"; @@ -75,11 +74,6 @@ export function createAppStorage(key: string, defaultValue: T, clusterId?: st equals: comparer.structural, // save only when something really changed }); - // remove json-file when cluster deleted - if (clusterId !== undefined) { - when(() => ClusterStore.getInstance(false)?.removedClusters.has(clusterId)).then(removeFile); - } - async function saveFile(state: Record = {}) { logger.info(`${logPrefix} saving ${filePath}`); @@ -92,11 +86,6 @@ export function createAppStorage(key: string, defaultValue: T, clusterId?: st }); } } - - function removeFile() { - logger.debug(`${logPrefix} removing ${filePath}`); - fse.unlink(filePath).catch(Function); - } } return new StorageHelper(key, {