MOBILE-3101 h5p: Make H5P work with the new webview
parent
8b9635e675
commit
830089e094
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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) {}
|
||||||
|
|
Loading…
Reference in New Issue