Skip to content
Snippets Groups Projects
Commit 84e1b69a authored by Xavier Jouslin de Noray's avatar Xavier Jouslin de Noray
Browse files

Plugin Architecture: request send all plugin duplicate by achitecture

Gitlab: #6
Change-Id: I41f2cd35f4d674f6557691b87385dfa865263549
parent 04854a84
No related branches found
No related tags found
No related merge requests found
...@@ -49,12 +49,13 @@ export class FileManagerService { ...@@ -49,12 +49,13 @@ export class FileManagerService {
const zip = new StreamZip.async({ file: path }); const zip = new StreamZip.async({ file: path });
const entries = await zip.entries(); const entries = await zip.entries();
for (const entry of Object.values(entries)) { for (const entry of Object.values(entries)) {
if (entry.name.startsWith(folderPath)) { const lib = entry.name.split('/')[1];
files.push(entry.name); if (entry.name.startsWith(folderPath) && !files.includes(lib)) {
files.push(lib);
} }
} }
zip.close(); zip.close();
return files.map((file: string) => file.split('/')[1]); return files;
} catch (e) { } catch (e) {
return []; return [];
} }
......
...@@ -59,6 +59,7 @@ export class PluginsManager { ...@@ -59,6 +59,7 @@ export class PluginsManager {
} }
return await Promise.all( return await Promise.all(
this.plugins this.plugins
.filter(plugin => this.isPluginAvailable(plugin.id, arch))
.map(async (plugin: Plugins) => { .map(async (plugin: Plugins) => {
return { return {
id: plugin.id, id: plugin.id,
...@@ -81,7 +82,6 @@ export class PluginsManager { ...@@ -81,7 +82,6 @@ export class PluginsManager {
author: plugin.author, author: plugin.author,
}; };
}) })
.filter(async plugin => this.isPluginAvailable((await plugin).id, arch))
); );
} }
...@@ -137,6 +137,10 @@ export class PluginsManager { ...@@ -137,6 +137,10 @@ export class PluginsManager {
) { ) {
return undefined; return undefined;
} }
const platform = this.getPlatform(arch);
if (platform === undefined) {
return undefined;
}
return ( return (
// eslint-disable-next-line // eslint-disable-next-line
__dirname + __dirname +
...@@ -145,13 +149,19 @@ export class PluginsManager { ...@@ -145,13 +149,19 @@ export class PluginsManager {
'/' + '/' +
id + id +
'/' + '/' +
arch + platform +
'/' + '/' +
id + id +
'.jpl' '.jpl'
); );
} }
getPlatform(arch: string): string | undefined {
return Array.from(this.archesResolution.entries()).find(([_, value]) =>
value.includes(arch)
)?.[0];
}
async getNewPlugin( async getNewPlugin(
path: string, path: string,
platforms: string[] platforms: string[]
...@@ -231,10 +241,12 @@ export class PluginsManager { ...@@ -231,10 +241,12 @@ export class PluginsManager {
plugin.arches.includes(arch as string) && plugin.arches.includes(arch as string) &&
arch !== undefined arch !== undefined
); );
const platform = this.getPlatform(arch as string);
if ( if (
plugin === undefined || plugin === undefined ||
process.env.DATA_DIRECTORY === undefined || process.env.DATA_DIRECTORY === undefined ||
plugin.icon === undefined plugin.icon === undefined ||
platform === undefined
) { ) {
return ''; return '';
} }
...@@ -247,7 +259,7 @@ export class PluginsManager { ...@@ -247,7 +259,7 @@ export class PluginsManager {
'/' + '/' +
plugin.id + plugin.id +
'/' + '/' +
arch + platform +
'/' + '/' +
plugin.id + plugin.id +
'.jpl', '.jpl',
...@@ -284,7 +296,7 @@ export class PluginsManager { ...@@ -284,7 +296,7 @@ export class PluginsManager {
} }
// eslint-disable-next-line // eslint-disable-next-line
dataDirectory = __dirname + '/../..' + dataDirectory; dataDirectory = __dirname + '/../..' + dataDirectory;
const plugins = []; const plugins: Plugins[] = [];
const pluginsPath = await this.fileManager.listFiles(dataDirectory); const pluginsPath = await this.fileManager.listFiles(dataDirectory);
if (pluginsPath === undefined || pluginsPath.length === 0) { if (pluginsPath === undefined || pluginsPath.length === 0) {
return; return;
...@@ -308,6 +320,7 @@ export class PluginsManager { ...@@ -308,6 +320,7 @@ export class PluginsManager {
'.jpl', '.jpl',
[platformPath] [platformPath]
); );
// TODO: should refactor this because it's possible that two plugins in different platform have the same id
if ( plugin === undefined) { if ( plugin === undefined) {
continue; continue;
} }
...@@ -325,10 +338,12 @@ export class PluginsManager { ...@@ -325,10 +338,12 @@ export class PluginsManager {
(plugin: Plugins) => (plugin: Plugins) =>
plugin.id === id && plugin.arches.includes(arch) && arch !== undefined plugin.id === id && plugin.arches.includes(arch) && arch !== undefined
); );
const platform = this.getPlatform(arch);
if ( if (
plugin === undefined || plugin === undefined ||
process.env.DATA_DIRECTORY === undefined || process.env.DATA_DIRECTORY === undefined ||
plugin.background === undefined plugin.background === undefined ||
platform === undefined
) { ) {
return ''; return '';
} }
...@@ -342,7 +357,7 @@ export class PluginsManager { ...@@ -342,7 +357,7 @@ export class PluginsManager {
'/' + '/' +
plugin.id + plugin.id +
'/' + '/' +
arch + platform +
'/' + '/' +
plugin.id + plugin.id +
'.jpl', '.jpl',
...@@ -361,7 +376,10 @@ export class PluginsManager { ...@@ -361,7 +376,10 @@ export class PluginsManager {
if (this.archesResolution.has(platform)) { if (this.archesResolution.has(platform)) {
const oldArches = this.archesResolution.get(platform); const oldArches = this.archesResolution.get(platform);
if (oldArches === undefined) { if (oldArches === undefined) {
this.archesResolution.set(platform, arches); this.archesResolution.set(
platform,
JSON.parse(JSON.stringify(arches))
);
continue; continue;
} }
for (const arch of arches) { for (const arch of arches) {
...@@ -369,9 +387,12 @@ export class PluginsManager { ...@@ -369,9 +387,12 @@ export class PluginsManager {
oldArches.push(arch); oldArches.push(arch);
} }
} }
this.archesResolution.set(platform, oldArches); this.archesResolution.set(
platform,
JSON.parse(JSON.stringify(oldArches))
);
} else { } else {
this.archesResolution.set(platform, arches); this.archesResolution.set(platform, JSON.parse(JSON.stringify(arches)));
} }
} }
} }
......
...@@ -128,7 +128,7 @@ describe('Plugins manager service tests', function () { ...@@ -128,7 +128,7 @@ describe('Plugins manager service tests', function () {
process.env.DATA_DIRECTORY = '/path/to/plugins'; process.env.DATA_DIRECTORY = '/path/to/plugins';
stub(Object.getPrototypeOf(pluginsManagerService), 'isPluginAvailable').returns(true); stub(Object.getPrototypeOf(pluginsManagerService), 'isPluginAvailable').returns(true);
stub(Object.getPrototypeOf(pluginsManagerService), 'getPlatform').returns(['test']);
const actualPath = await pluginsManagerService.getPluginPath('test', 'test'); const actualPath = await pluginsManagerService.getPluginPath('test', 'test');
expect(actualPath).toContain(expectedPath); expect(actualPath).toContain(expectedPath);
...@@ -282,7 +282,7 @@ describe('Plugins manager service tests', function () { ...@@ -282,7 +282,7 @@ describe('Plugins manager service tests', function () {
fileManager.readArchive.resolves(JSON.stringify(manifest)); fileManager.readArchive.resolves(JSON.stringify(manifest));
fileManager.readArchive.resolves(expected); fileManager.readArchive.resolves(expected);
stub(Object.getPrototypeOf(pluginsManagerService), 'getPlatform').returns(['test']);
const actual = await pluginsManagerService['getIcon']("test", "test"); const actual = await pluginsManagerService['getIcon']("test", "test");
expect(actual).toEqual(expected); expect(actual).toEqual(expected);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment