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