Merge pull request #2241 from dpalou/MOBILE-3277

Mobile 3277
main
Juan Leyva 2020-01-22 16:44:49 +01:00 committed by GitHub
commit 086fc954ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 59 additions and 37 deletions

View File

@ -102,6 +102,7 @@ export class CoreSitePluginsPluginContentComponent implements OnInit, DoCheck {
this.jsData = Object.assign(this.data, this.sitePluginsProvider.createDataForJS(this.initResult, result)); this.jsData = Object.assign(this.data, this.sitePluginsProvider.createDataForJS(this.initResult, result));
// Pass some methods as jsData so they can be called from the template too. // Pass some methods as jsData so they can be called from the template too.
this.jsData.fetchContent = this.fetchContent.bind(this);
this.jsData.openContent = this.openContent.bind(this); this.jsData.openContent = this.openContent.bind(this);
this.jsData.refreshContent = this.refreshContent.bind(this); this.jsData.refreshContent = this.refreshContent.bind(this);
this.jsData.updateContent = this.updateContent.bind(this); this.jsData.updateContent = this.updateContent.bind(this);

View File

@ -164,7 +164,7 @@ export class CoreSitePluginsProvider {
if (initResult) { if (initResult) {
// First of all, add the data returned by the init JS (if any). // First of all, add the data returned by the init JS (if any).
data = this.utils.clone(initResult.jsResult || {}); data = Object.assign({}, initResult.jsResult || {});
if (typeof data == 'boolean') { if (typeof data == 'boolean') {
data = {}; data = {};
} }

View File

@ -1628,8 +1628,17 @@ export class CoreSitesProvider {
* Register a site schema. * Register a site schema.
*/ */
registerSiteSchema(schema: CoreSiteSchema): void { registerSiteSchema(schema: CoreSiteSchema): void {
if (this.currentSite) {
// Site has already been created, it's a schema probably added by site plugins. Add it only to current site.
const schemas: {[name: string]: CoreSiteSchema} = {};
schemas[schema.name] = schema;
this.applySiteSchemas(this.currentSite, schemas);
} else {
this.siteSchemas[schema.name] = schema; this.siteSchemas[schema.name] = schema;
} }
}
/** /**
* Install and upgrade all the registered schemas and tables. * Install and upgrade all the registered schemas and tables.
@ -1638,7 +1647,6 @@ export class CoreSitesProvider {
* @return Promise resolved when done. * @return Promise resolved when done.
*/ */
migrateSiteSchemas(site: CoreSite): Promise<any> { migrateSiteSchemas(site: CoreSite): Promise<any> {
const db = site.getDb();
if (this.siteSchemasMigration[site.id]) { if (this.siteSchemasMigration[site.id]) {
return this.siteSchemasMigration[site.id]; return this.siteSchemasMigration[site.id];
@ -1647,7 +1655,27 @@ export class CoreSitesProvider {
this.logger.debug(`Migrating all schemas of ${site.id}`); this.logger.debug(`Migrating all schemas of ${site.id}`);
// First create tables not registerd with name/version. // First create tables not registerd with name/version.
const promise = db.createTablesFromSchema(this.siteTablesSchemas).then(() => { const promise = site.getDb().createTablesFromSchema(this.siteTablesSchemas).then(() => {
return this.applySiteSchemas(site, this.siteSchemas);
});
this.siteSchemasMigration[site.id] = promise;
return promise.finally(() => {
delete this.siteSchemasMigration[site.id];
});
}
/**
* Install and upgrade the supplied schemas for a certain site.
*
* @param site Site.
* @param schemas Schemas to migrate.
* @return Promise resolved when done.
*/
protected applySiteSchemas(site: CoreSite, schemas: {[name: string]: CoreSiteSchema}): Promise<any> {
const db = site.getDb();
// Fetch installed versions of the schema. // Fetch installed versions of the schema.
return db.getAllRecords(this.SCHEMA_VERSIONS_TABLE).then((records) => { return db.getAllRecords(this.SCHEMA_VERSIONS_TABLE).then((records) => {
const versions = {}; const versions = {};
@ -1656,8 +1684,8 @@ export class CoreSitesProvider {
}); });
const promises = []; const promises = [];
for (const name in this.siteSchemas) { for (const name in schemas) {
const schema = this.siteSchemas[name]; const schema = schemas[name];
const oldVersion = versions[name] || 0; const oldVersion = versions[name] || 0;
if (oldVersion >= schema.version) { if (oldVersion >= schema.version) {
continue; continue;
@ -1681,13 +1709,6 @@ export class CoreSitesProvider {
return Promise.all(promises); return Promise.all(promises);
}); });
});
this.siteSchemasMigration[site.id] = promise;
return promise.finally(() => {
delete this.siteSchemasMigration[site.id];
});
} }
/** /**