From 578a6cec2119614015f95d2bac15be3f46287197 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Tue, 25 Jan 2022 15:34:20 +0300 Subject: [PATCH] Update extension after ipc event Signed-off-by: Alex Andreev --- src/common/ipc/extension-loader.ipc.ts | 2 ++ .../bundled-latest-version-checker.ts | 2 +- .../extension-loader/extension-loader.ts | 6 +++-- .../bundled-extensions-updater.ts | 25 ++++++++++--------- .../extension-updater/extension-updater.ts | 2 +- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/common/ipc/extension-loader.ipc.ts b/src/common/ipc/extension-loader.ipc.ts index 24c1de84d0..02f6c7bd64 100644 --- a/src/common/ipc/extension-loader.ipc.ts +++ b/src/common/ipc/extension-loader.ipc.ts @@ -2,4 +2,6 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +export const BundledExtensionsLoaded = "extension-loader:bundled-extensions-loaded"; export const BundledExtensionsUpdated = "extension-loader:bundled-extensions-updated"; +export const UpdateBundledExtension = "extension-loader:update-bundled-extension"; diff --git a/src/extensions/bundled-latest-version-checker.ts b/src/extensions/bundled-latest-version-checker.ts index b911e0582b..f02e673046 100644 --- a/src/extensions/bundled-latest-version-checker.ts +++ b/src/extensions/bundled-latest-version-checker.ts @@ -29,7 +29,7 @@ export class BundledVersionChecker implements LensExtensionLatestVersionChecker const json = await this.getJson(`${extensionUpdateUrl}/versions.json`); if (!json || json.error || !json[manifest.name]) { - logger.info(`[BUNDLED-EXTENSIONS-UPDATER]: No version found for ${manifest.name}.`); + logger.info(`[EXTENSION-VERSION-CHECKER]: No version found for ${manifest.name}.`); return null; } diff --git a/src/extensions/extension-loader/extension-loader.ts b/src/extensions/extension-loader/extension-loader.ts index 2957f3f610..f9f3f9b33e 100644 --- a/src/extensions/extension-loader/extension-loader.ts +++ b/src/extensions/extension-loader/extension-loader.ts @@ -8,7 +8,7 @@ import { EventEmitter } from "events"; import { isEqual } from "lodash"; import { action, computed, makeObservable, observable, observe, reaction, when } from "mobx"; import path from "path"; -import { broadcastMessage, ipcMainOn, ipcRendererOn, requestMain, ipcMainHandle } from "../../common/ipc"; +import { broadcastMessage, ipcMainOn, ipcRendererOn, requestMain, ipcMainHandle, UpdateBundledExtension } from "../../common/ipc"; import { Disposer, toJS } from "../../common/utils"; import logger from "../../main/logger"; import type { KubernetesCluster } from "../common-api/catalog"; @@ -288,7 +288,9 @@ export class ExtensionLoader { } }); - this.checkForExtensionUpdate(extension); + this.checkForExtensionUpdate(extension).then(() => { + broadcastMessage(UpdateBundledExtension, extension.id) + }); return removeItems; }); diff --git a/src/renderer/components/+extensions/extension-updater/bundled-extensions-updater.ts b/src/renderer/components/+extensions/extension-updater/bundled-extensions-updater.ts index b8b6aa1fca..03c47efcea 100644 --- a/src/renderer/components/+extensions/extension-updater/bundled-extensions-updater.ts +++ b/src/renderer/components/+extensions/extension-updater/bundled-extensions-updater.ts @@ -3,14 +3,14 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { BundledExtensionsUpdated } from "../../../../common/ipc"; +import { UpdateBundledExtension } from "../../../../common/ipc"; import { logger } from "../../../../extensions/common-api"; import type { InstalledExtension } from "../../../../extensions/extension-discovery/extension-discovery"; import { ExtensionUpdater, UpdaterDependencies } from "./extension-updater"; interface Dependencies extends UpdaterDependencies { extensions: InstalledExtension[]; - ipcRenderer: { send: (name: string) => void }; + ipcRenderer: { send: (name: string) => void, on: (channel: string, listener: (event: Electron.IpcRendererEvent, ...args: any[]) => any) => void }; } export class BundledExtensionsUpdater extends ExtensionUpdater { @@ -18,16 +18,17 @@ export class BundledExtensionsUpdater extends ExtensionUpdater { super(dependencies); } - async updateAll() { - logger.info("[EXTENSIONS-UPDATER]: Bundled extensions update started."); + init() { + this.dependencies.ipcRenderer.on(UpdateBundledExtension, async (event, extensionId: string) => { + const extension = this.dependencies.extensions.find(extension => extension.id == extensionId); - const updates = this.dependencies.extensions.map(this.update); - try { - await Promise.allSettled(updates); - } finally { - this.dependencies.ipcRenderer.send(BundledExtensionsUpdated); - } - - logger.info("[EXTENSIONS-UPDATER]: Bundled extensions update finished."); + if (extension?.isBundled && extension?.availableUpdate) { + try { + await this.update(extension); + } catch (err) { + logger.error(`Update failed for ${extension.manifest.name}`) + } + } + }); } } \ No newline at end of file diff --git a/src/renderer/components/+extensions/extension-updater/extension-updater.ts b/src/renderer/components/+extensions/extension-updater/extension-updater.ts index bf39ff012a..36a1ae48d6 100644 --- a/src/renderer/components/+extensions/extension-updater/extension-updater.ts +++ b/src/renderer/components/+extensions/extension-updater/extension-updater.ts @@ -22,7 +22,7 @@ export class ExtensionUpdater { // TODO: actual install // this.dependencies.installFromInput(availableUpdate.input); } - reject(); + reject("Update failed"); }); }