forked from CIT/Vmeda.Online
		
	MOBILE-4337 h5p: Don't install editor libraries
This commit is contained in:
		
							parent
							
								
									45008e402a
								
							
						
					
					
						commit
						035ba7cf86
					
				@ -130,9 +130,7 @@ export class CoreH5PStorage {
 | 
			
		||||
            if (libraryData.dynamicDependencies !== undefined) {
 | 
			
		||||
                promises.push(this.h5pFramework.saveLibraryDependencies(libraryData, libraryData.dynamicDependencies, 'dynamic'));
 | 
			
		||||
            }
 | 
			
		||||
            if (libraryData.editorDependencies !== undefined) {
 | 
			
		||||
                promises.push(this.h5pFramework.saveLibraryDependencies(libraryData, libraryData.editorDependencies, 'editor'));
 | 
			
		||||
            }
 | 
			
		||||
            // Don't save editor dependencies, they are not used in the app.
 | 
			
		||||
 | 
			
		||||
            await Promise.all(promises);
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,73 @@ export class CoreH5PValidator {
 | 
			
		||||
    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.
 | 
			
		||||
     * 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) {
 | 
			
		||||
                Object.assign(missing, this.getMissingDependencies(library.dynamicDependencies, library, libraries));
 | 
			
		||||
            }
 | 
			
		||||
            if (library.editorDependencies !== undefined) {
 | 
			
		||||
                Object.assign(missing, this.getMissingDependencies(library.editorDependencies, library, libraries));
 | 
			
		||||
            }
 | 
			
		||||
            // No need to check editorDependencies, they are not used in the app.
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return missing;
 | 
			
		||||
@ -173,14 +238,20 @@ export class CoreH5PValidator {
 | 
			
		||||
    ): Promise<CoreH5PMainJSONFilesData> {
 | 
			
		||||
 | 
			
		||||
        // Read the needed files.
 | 
			
		||||
        const results = await Promise.all([
 | 
			
		||||
        const [mainJsonData, contentJsonData, librariesJsonData] = await Promise.all([
 | 
			
		||||
            this.readH5PJsonFile(packagePath),
 | 
			
		||||
            this.readH5PContentJsonFile(packagePath),
 | 
			
		||||
            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.
 | 
			
		||||
        const missingLibraries = this.getMissingLibraries(results[2]);
 | 
			
		||||
        const missingLibraries = this.getMissingLibraries(librariesJsonData);
 | 
			
		||||
 | 
			
		||||
        // Check if the missing libraries are already installed in the app.
 | 
			
		||||
        await Promise.all(Object.keys(missingLibraries).map(async (libString) => {
 | 
			
		||||
@ -204,11 +275,7 @@ export class CoreH5PValidator {
 | 
			
		||||
            } }));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            librariesJsonData: results[2],
 | 
			
		||||
            mainJsonData: results[0],
 | 
			
		||||
            contentJsonData: results[1],
 | 
			
		||||
        };
 | 
			
		||||
        return { librariesJsonData, mainJsonData, contentJsonData };
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user