From a7232e67c5e4f617016f78ac58199d7fb1c725fa Mon Sep 17 00:00:00 2001 From: Xavier Jouslin de Noray <xavier.jouslindenoray@savoirfairelinux.com> Date: Tue, 25 Jul 2023 17:30:41 -0400 Subject: [PATCH] PluginManager: resolve architecture to be able to handle dynamically all platform's queries Change-Id: Ic0f332b4c1615c58419937a200cc844d767afe2a --- src/services/plugins_manager.service.ts | 28 ++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/services/plugins_manager.service.ts b/src/services/plugins_manager.service.ts index 9128438..2ccbfe6 100644 --- a/src/services/plugins_manager.service.ts +++ b/src/services/plugins_manager.service.ts @@ -25,7 +25,7 @@ import {basename, extname} from 'path'; @Service() export class PluginsManager { private plugins: Plugins[] = []; - + private readonly archesResolution = new Map<string, string[]>(); constructor( private readonly fileManager: FileManagerService, private readonly certificateManager: CertificateManagerService @@ -131,7 +131,7 @@ export class PluginsManager { async getNewPlugin( path: string, - arches: string[] + platforms: string[] ): Promise<Plugins | undefined> { try { const plugin = await this.readManifest(path); @@ -140,9 +140,11 @@ export class PluginsManager { path, basename(path, extname(path)) + '.crt' ); - if (issuer === undefined) { + const arches = await this.getAllPluginArches(path); + if (issuer === undefined || arches === undefined) { return; } + this.addPluginArch(platforms, arches); return { id: plugin.id, name: plugin.name, @@ -330,4 +332,24 @@ export class PluginsManager { return ''; }); } + + private addPluginArch(platforms: string[], arches: string[]): void { + for (const platform of platforms) { + if (this.archesResolution.has(platform)) { + const oldArches = this.archesResolution.get(platform); + if (oldArches === undefined) { + this.archesResolution.set(platform, arches); + continue; + } + for (const arch of arches) { + if (!oldArches.includes(arch)) { + oldArches.push(arch); + } + } + this.archesResolution.set(platform, oldArches); + } else { + this.archesResolution.set(platform, arches); + } + } + } } -- GitLab