MOBILE-3101 h5p: Make H5P work with the new webview

main
Dani Palou 2020-03-31 09:05:13 +02:00
parent 8b9635e675
commit 830089e094
2 changed files with 64 additions and 20 deletions

View File

@ -27,6 +27,7 @@ import { CoreH5PUtilsProvider } from './utils';
import { CoreH5PContentValidator } from '../classes/content-validator'; import { CoreH5PContentValidator } from '../classes/content-validator';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { FileEntry } from '@ionic-native/file'; import { FileEntry } from '@ionic-native/file';
import { makeSingleton } from '@singletons/core.singletons';
/** /**
* Service to provide H5P functionalities. * Service to provide H5P functionalities.
@ -410,7 +411,7 @@ export class CoreH5PProvider {
* @return Promise resolved with all of the files content in one string. * @return Promise resolved with all of the files content in one string.
*/ */
protected concatenateFiles(assets: CoreH5PDependencyAsset[], type: string): Promise<string> { protected concatenateFiles(assets: CoreH5PDependencyAsset[], type: string): Promise<string> {
const basePath = this.fileProvider.getBasePathInstant(); const basePath = this.fileProvider.convertFileSrc(this.fileProvider.getBasePathInstant());
let content = '', let content = '',
promise = Promise.resolve(); // Use a chain of promises so the order is kept. promise = Promise.resolve(); // Use a chain of promises so the order is kept.
@ -495,7 +496,8 @@ export class CoreH5PProvider {
const contentId = this.getContentId(id), const contentId = this.getContentId(id),
basePath = this.fileProvider.getBasePathInstant(), basePath = this.fileProvider.getBasePathInstant(),
contentUrl = this.textUtils.concatenatePaths(basePath, this.getContentFolderPath(content.folderName, site.getId())); contentUrl = this.fileProvider.convertFileSrc(this.textUtils.concatenatePaths(
basePath, this.getContentFolderPath(content.folderName, site.getId())));
// Create the settings needed for the content. // Create the settings needed for the content.
const contentSettings = { const contentSettings = {
@ -560,6 +562,40 @@ export class CoreH5PProvider {
}); });
} }
/**
* Delete all content indexes of all sites from filesystem.
*
* @return Promise resolved when done.
*/
async deleteAllContentIndexes(): Promise<void> {
const siteIds = await this.sitesProvider.getSitesIds();
await Promise.all(siteIds.map((siteId) => this.deleteAllContentIndexesForSite(siteId)));
}
/**
* Delete all content indexes for a certain site from filesystem.
*
* @param siteId Site ID. If not defined, current site.
* @return Promise resolved when done.
*/
async deleteAllContentIndexesForSite(siteId?: string): Promise<void> {
const site = await this.sitesProvider.getSite(siteId);
const records = await site.getDb().getAllRecords(this.CONTENT_TABLE);
const promises = records.map(async (record) => {
try {
await this.fileProvider.removeFile(this.getContentIndexPath(record.foldername, site.getId()));
} catch (err) {
// Ignore errors, maybe the file doesn't exist.
}
});
await Promise.all(promises);
}
/** /**
* Delete cached assets from DB and filesystem. * Delete cached assets from DB and filesystem.
* *
@ -1033,12 +1069,11 @@ export class CoreH5PProvider {
settings.loadedJs = []; settings.loadedJs = [];
settings.loadedCss = []; settings.loadedCss = [];
const libUrl = this.getCoreH5PPath(), const libUrl = this.getCoreH5PPath();
relPath = this.urlUtils.removeProtocolAndWWW(libUrl);
// Add core stylesheets. // Add core stylesheets.
CoreH5PProvider.STYLES.forEach((style) => { CoreH5PProvider.STYLES.forEach((style) => {
settings.core.styles.push(relPath + style); settings.core.styles.push(libUrl + style);
cssRequires.push(libUrl + style); cssRequires.push(libUrl + style);
}); });
@ -1279,8 +1314,10 @@ export class CoreH5PProvider {
return { return {
baseUrl: this.fileProvider.getWWWPath(), baseUrl: this.fileProvider.getWWWPath(),
url: this.textUtils.concatenatePaths(basePath, this.getExternalH5PFolderPath(site.getId())), url: this.fileProvider.convertFileSrc(this.textUtils.concatenatePaths(
urlLibraries: this.textUtils.concatenatePaths(basePath, this.getLibrariesFolderPath(site.getId())), basePath, this.getExternalH5PFolderPath(site.getId()))),
urlLibraries: this.fileProvider.convertFileSrc(this.textUtils.concatenatePaths(
basePath, this.getLibrariesFolderPath(site.getId()))),
postUserStatistics: false, postUserStatistics: false,
ajax: ajaxPaths, ajax: ajaxPaths,
saveFreq: false, saveFreq: false,
@ -2623,6 +2660,8 @@ export class CoreH5PProvider {
} }
} }
export class CoreH5P extends makeSingleton(CoreH5PProvider) {}
/** /**
* Display options behaviour constants. * Display options behaviour constants.
*/ */

View File

@ -17,6 +17,7 @@ import { CoreConfigProvider } from './config';
import { CoreInitHandler, CoreInitDelegate } from './init'; import { CoreInitHandler, CoreInitDelegate } from './init';
import { CoreLoggerProvider } from './logger'; import { CoreLoggerProvider } from './logger';
import { CoreConfigConstants } from '../configconstants'; import { CoreConfigConstants } from '../configconstants';
import { CoreH5P } from '@core/h5p/providers/h5p';
import { makeSingleton } from '@singletons/core.singletons'; import { makeSingleton } from '@singletons/core.singletons';
/** /**
@ -34,7 +35,8 @@ export class CoreUpdateManagerProvider implements CoreInitHandler {
protected VERSION_APPLIED = 'version_applied'; protected VERSION_APPLIED = 'version_applied';
protected logger; protected logger;
constructor(logger: CoreLoggerProvider, private configProvider: CoreConfigProvider) { constructor(logger: CoreLoggerProvider,
protected configProvider: CoreConfigProvider) {
this.logger = logger.getInstance('CoreUpdateManagerProvider'); this.logger = logger.getInstance('CoreUpdateManagerProvider');
} }
@ -44,21 +46,24 @@ export class CoreUpdateManagerProvider implements CoreInitHandler {
* *
* @return Promise resolved when the update process finishes. * @return Promise resolved when the update process finishes.
*/ */
load(): Promise<any> { async load(): Promise<any> {
const promises = [], const promises = [];
versionCode = CoreConfigConstants.versioncode; const versionCode = CoreConfigConstants.versioncode;
return this.configProvider.get(this.VERSION_APPLIED, 0).then((versionApplied: number) => { const versionApplied: number = await this.configProvider.get(this.VERSION_APPLIED, 0);
// Put here the code to treat app updates. if (versionCode >= 3900 && versionApplied < 3900 && versionApplied > 0) {
promises.push(CoreH5P.instance.deleteAllContentIndexes());
}
return Promise.all(promises).then(() => { try {
return this.configProvider.set(this.VERSION_APPLIED, versionCode); await Promise.all(promises);
}).catch((error) => {
this.logger.error(`Error applying update from ${versionApplied} to ${versionCode}`, error); await this.configProvider.set(this.VERSION_APPLIED, versionCode);
}); } catch (error) {
}); this.logger.error(`Error applying update from ${versionApplied} to ${versionCode}`, error);
}
} }
} }
export class CoreUpdateManager extends makeSingleton<CoreUpdateManagerProvider>(CoreUpdateManagerProvider) {} export class CoreUpdateManager extends makeSingleton(CoreUpdateManagerProvider) {}