forked from CIT/Vmeda.Online
		
	Merge pull request #4185 from dpalou/MOBILE-4337
MOBILE-4337 h5p: Don't install editor libraries
This commit is contained in:
		
						commit
						ad12f89a8e
					
				@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user