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 { TranslateService } from '@ngx-translate/core';
import { FileEntry } from '@ionic-native/file';
import { makeSingleton } from '@singletons/core.singletons';
/**
* Service to provide H5P functionalities.
@ -410,7 +411,7 @@ export class CoreH5PProvider {
* @return Promise resolved with all of the files content in one string.
*/
protected concatenateFiles(assets: CoreH5PDependencyAsset[], type: string): Promise<string> {
const basePath = this.fileProvider.getBasePathInstant();
const basePath = this.fileProvider.convertFileSrc(this.fileProvider.getBasePathInstant());
let content = '',
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),
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.
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.
*
@ -1033,12 +1069,11 @@ export class CoreH5PProvider {
settings.loadedJs = [];
settings.loadedCss = [];
const libUrl = this.getCoreH5PPath(),
relPath = this.urlUtils.removeProtocolAndWWW(libUrl);
const libUrl = this.getCoreH5PPath();
// Add core stylesheets.
CoreH5PProvider.STYLES.forEach((style) => {
settings.core.styles.push(relPath + style);
settings.core.styles.push(libUrl + style);
cssRequires.push(libUrl + style);
});
@ -1279,8 +1314,10 @@ export class CoreH5PProvider {
return {
baseUrl: this.fileProvider.getWWWPath(),
url: this.textUtils.concatenatePaths(basePath, this.getExternalH5PFolderPath(site.getId())),
urlLibraries: this.textUtils.concatenatePaths(basePath, this.getLibrariesFolderPath(site.getId())),
url: this.fileProvider.convertFileSrc(this.textUtils.concatenatePaths(
basePath, this.getExternalH5PFolderPath(site.getId()))),
urlLibraries: this.fileProvider.convertFileSrc(this.textUtils.concatenatePaths(
basePath, this.getLibrariesFolderPath(site.getId()))),
postUserStatistics: false,
ajax: ajaxPaths,
saveFreq: false,
@ -2623,6 +2660,8 @@ export class CoreH5PProvider {
}
}
export class CoreH5P extends makeSingleton(CoreH5PProvider) {}
/**
* Display options behaviour constants.
*/

View File

@ -17,6 +17,7 @@ import { CoreConfigProvider } from './config';
import { CoreInitHandler, CoreInitDelegate } from './init';
import { CoreLoggerProvider } from './logger';
import { CoreConfigConstants } from '../configconstants';
import { CoreH5P } from '@core/h5p/providers/h5p';
import { makeSingleton } from '@singletons/core.singletons';
/**
@ -34,7 +35,8 @@ export class CoreUpdateManagerProvider implements CoreInitHandler {
protected VERSION_APPLIED = 'version_applied';
protected logger;
constructor(logger: CoreLoggerProvider, private configProvider: CoreConfigProvider) {
constructor(logger: CoreLoggerProvider,
protected configProvider: CoreConfigProvider) {
this.logger = logger.getInstance('CoreUpdateManagerProvider');
}
@ -44,21 +46,24 @@ export class CoreUpdateManagerProvider implements CoreInitHandler {
*
* @return Promise resolved when the update process finishes.
*/
load(): Promise<any> {
const promises = [],
versionCode = CoreConfigConstants.versioncode;
async load(): Promise<any> {
const promises = [];
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(() => {
return this.configProvider.set(this.VERSION_APPLIED, versionCode);
}).catch((error) => {
this.logger.error(`Error applying update from ${versionApplied} to ${versionCode}`, error);
});
});
try {
await Promise.all(promises);
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) {}