MOBILE-4337 h5p: Don't install editor libraries
parent
45008e402a
commit
035ba7cf86
|
@ -130,9 +130,7 @@ export class CoreH5PStorage {
|
||||||
if (libraryData.dynamicDependencies !== undefined) {
|
if (libraryData.dynamicDependencies !== undefined) {
|
||||||
promises.push(this.h5pFramework.saveLibraryDependencies(libraryData, libraryData.dynamicDependencies, 'dynamic'));
|
promises.push(this.h5pFramework.saveLibraryDependencies(libraryData, libraryData.dynamicDependencies, 'dynamic'));
|
||||||
}
|
}
|
||||||
if (libraryData.editorDependencies !== undefined) {
|
// Don't save editor dependencies, they are not used in the app.
|
||||||
promises.push(this.h5pFramework.saveLibraryDependencies(libraryData, libraryData.editorDependencies, 'editor'));
|
|
||||||
}
|
|
||||||
|
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -29,6 +29,73 @@ export class CoreH5PValidator {
|
||||||
constructor(public h5pFramework: CoreH5PFramework) {
|
constructor(public h5pFramework: CoreH5PFramework) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all editor dependencies of the package.
|
||||||
|
*
|
||||||
|
* @param mainJsonData Contents of h5p.json file.
|
||||||
|
* @param librariesJsonData JSON data about each library.
|
||||||
|
* @returns Set with the editor dependencies names.
|
||||||
|
*/
|
||||||
|
protected getAllEditorDependencies(
|
||||||
|
mainJsonData: CoreH5PMainJSONData,
|
||||||
|
librariesJsonData: CoreH5PLibrariesJsonData,
|
||||||
|
): Set<string> {
|
||||||
|
const editorDependencies = new Set<string>();
|
||||||
|
|
||||||
|
// Function to add or remove an editor dependency to the Set.
|
||||||
|
const addOrRemoveEditorDependency = (library: CoreH5PLibraryBasicData, add = true) => {
|
||||||
|
const libString = CoreH5PCore.libraryToString(library);
|
||||||
|
if ((add && editorDependencies.has(libString)) || (!add && !editorDependencies.has(libString))) {
|
||||||
|
// Already treated, ignore.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (add) {
|
||||||
|
editorDependencies.add(libString);
|
||||||
|
} else {
|
||||||
|
editorDependencies.delete(libString);
|
||||||
|
}
|
||||||
|
|
||||||
|
const libraryData = librariesJsonData[libString];
|
||||||
|
(libraryData?.preloadedDependencies ?? []).concat(libraryData?.dynamicDependencies ?? []).forEach((dependency) => {
|
||||||
|
if (!add) {
|
||||||
|
// Remove all dependencies too.
|
||||||
|
addOrRemoveEditorDependency(dependency, add);
|
||||||
|
} else if (dependency.machineName.startsWith('H5PEditor.')) {
|
||||||
|
// Consider all dependencies that begin with H5PEditor as editor dependencies.
|
||||||
|
// It might be safe to consider all dependencies of an editor dependency as editor dependency too,
|
||||||
|
// but for now we decided to take a less aggressive approach.
|
||||||
|
addOrRemoveEditorDependency(dependency, add);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// First add all editor dependencies and some of their dependencies to the list.
|
||||||
|
Object.values(librariesJsonData).forEach((libraryData) => {
|
||||||
|
libraryData.editorDependencies?.forEach(library => {
|
||||||
|
addOrRemoveEditorDependency(library, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Now remove from the Set all the libraries that are listed as a preloaded/dynamic dependency of a non-editor library.
|
||||||
|
mainJsonData.preloadedDependencies?.forEach((dependency) => {
|
||||||
|
addOrRemoveEditorDependency(dependency, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
Object.keys(librariesJsonData).forEach((libString) => {
|
||||||
|
if (editorDependencies.has(libString)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const libraryData = librariesJsonData[libString];
|
||||||
|
(libraryData?.preloadedDependencies ?? []).concat(libraryData?.dynamicDependencies ?? []).forEach((dependency) => {
|
||||||
|
addOrRemoveEditorDependency(dependency, false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return editorDependencies;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get library data.
|
* Get library data.
|
||||||
* This function won't validate most things because it should've been done by the server already.
|
* This function won't validate most things because it should've been done by the server already.
|
||||||
|
@ -71,9 +138,7 @@ export class CoreH5PValidator {
|
||||||
if (library.dynamicDependencies !== undefined) {
|
if (library.dynamicDependencies !== undefined) {
|
||||||
Object.assign(missing, this.getMissingDependencies(library.dynamicDependencies, library, libraries));
|
Object.assign(missing, this.getMissingDependencies(library.dynamicDependencies, library, libraries));
|
||||||
}
|
}
|
||||||
if (library.editorDependencies !== undefined) {
|
// No need to check editorDependencies, they are not used in the app.
|
||||||
Object.assign(missing, this.getMissingDependencies(library.editorDependencies, library, libraries));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return missing;
|
return missing;
|
||||||
|
@ -173,14 +238,20 @@ export class CoreH5PValidator {
|
||||||
): Promise<CoreH5PMainJSONFilesData> {
|
): Promise<CoreH5PMainJSONFilesData> {
|
||||||
|
|
||||||
// Read the needed files.
|
// Read the needed files.
|
||||||
const results = await Promise.all([
|
const [mainJsonData, contentJsonData, librariesJsonData] = await Promise.all([
|
||||||
this.readH5PJsonFile(packagePath),
|
this.readH5PJsonFile(packagePath),
|
||||||
this.readH5PContentJsonFile(packagePath),
|
this.readH5PContentJsonFile(packagePath),
|
||||||
this.getPackageLibrariesData(packagePath, entries),
|
this.getPackageLibrariesData(packagePath, entries),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Remove editor dependencies from the list of libraries to install.
|
||||||
|
const editorDependencies = this.getAllEditorDependencies(mainJsonData, librariesJsonData);
|
||||||
|
editorDependencies.forEach((libString) => {
|
||||||
|
delete librariesJsonData[libString];
|
||||||
|
});
|
||||||
|
|
||||||
// Check if there are missing libraries.
|
// Check if there are missing libraries.
|
||||||
const missingLibraries = this.getMissingLibraries(results[2]);
|
const missingLibraries = this.getMissingLibraries(librariesJsonData);
|
||||||
|
|
||||||
// Check if the missing libraries are already installed in the app.
|
// Check if the missing libraries are already installed in the app.
|
||||||
await Promise.all(Object.keys(missingLibraries).map(async (libString) => {
|
await Promise.all(Object.keys(missingLibraries).map(async (libString) => {
|
||||||
|
@ -204,11 +275,7 @@ export class CoreH5PValidator {
|
||||||
} }));
|
} }));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return { librariesJsonData, mainJsonData, contentJsonData };
|
||||||
librariesJsonData: results[2],
|
|
||||||
mainJsonData: results[0],
|
|
||||||
contentJsonData: results[1],
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue