MOBILE-3821 core: Fix databases clean up
parent
84afd1ea4d
commit
d80ba6698b
|
@ -69,6 +69,7 @@ export class AddonModBookProvider {
|
|||
() => CoreSites.getSiteTable(LAST_CHAPTER_VIEWED_TABLE, {
|
||||
siteId,
|
||||
config: { cachingStrategy: CoreDatabaseCachingStrategy.None },
|
||||
onDestroy: () => delete this.lastChapterViewedTables[siteId],
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
|
|
@ -28,6 +28,7 @@ export class CoreDatabaseTable<
|
|||
protected database: SQLiteDB;
|
||||
protected tableName: string;
|
||||
protected primaryKeyColumns: PrimaryKeyColumn[];
|
||||
protected listeners: CoreDatabaseTableListener[] = [];
|
||||
|
||||
constructor(
|
||||
config: Partial<CoreDatabaseConfiguration>,
|
||||
|
@ -86,7 +87,16 @@ export class CoreDatabaseTable<
|
|||
* Destroy.
|
||||
*/
|
||||
async destroy(): Promise<void> {
|
||||
// Nothing to destroy by default, override this method if necessary.
|
||||
this.listeners.forEach(listener => listener.onDestroy?.());
|
||||
}
|
||||
|
||||
/**
|
||||
* Add listener.
|
||||
*
|
||||
* @param listener Listener.
|
||||
*/
|
||||
addListener(listener: CoreDatabaseTableListener): void {
|
||||
this.listeners.push(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -368,6 +378,13 @@ export interface CoreDatabaseConfiguration {
|
|||
// This definition is augmented in subclasses.
|
||||
}
|
||||
|
||||
/**
|
||||
* Database table listener.
|
||||
*/
|
||||
export interface CoreDatabaseTableListener {
|
||||
onDestroy?(): void;
|
||||
}
|
||||
|
||||
/**
|
||||
* CoreDatabaseTable constructor.
|
||||
*/
|
||||
|
|
|
@ -153,6 +153,7 @@ export class CoreCourseProvider {
|
|||
() => CoreSites.getSiteTable(COURSE_STATUS_TABLE, {
|
||||
siteId,
|
||||
config: { cachingStrategy: CoreDatabaseCachingStrategy.Eager },
|
||||
onDestroy: () => delete this.statusTables[siteId],
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
|
|
@ -74,6 +74,7 @@ export class CorePushNotificationsProvider {
|
|||
siteId,
|
||||
config: { cachingStrategy: CoreDatabaseCachingStrategy.None },
|
||||
primaryKeyColumns: ['appid', 'uuid'],
|
||||
onDestroy: () => delete this.registeredDevicesTables[siteId],
|
||||
},
|
||||
),
|
||||
),
|
||||
|
|
|
@ -113,6 +113,7 @@ export class CoreFilepoolProvider {
|
|||
siteId,
|
||||
config: { cachingStrategy: CoreDatabaseCachingStrategy.Lazy },
|
||||
primaryKeyColumns: ['fileId'],
|
||||
onDestroy: () => delete this.filesTables[siteId],
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
@ -122,6 +123,7 @@ export class CoreFilepoolProvider {
|
|||
siteId,
|
||||
config: { cachingStrategy: CoreDatabaseCachingStrategy.Lazy },
|
||||
primaryKeyColumns: ['fileId', 'component', 'componentId'],
|
||||
onDestroy: () => delete this.linksTables[siteId],
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
@ -130,6 +132,7 @@ export class CoreFilepoolProvider {
|
|||
() => CoreSites.getSiteTable<CoreFilepoolPackageEntry, 'id'>(PACKAGES_TABLE_NAME, {
|
||||
siteId,
|
||||
config: { cachingStrategy: CoreDatabaseCachingStrategy.Lazy },
|
||||
onDestroy: () => delete this.packagesTables[siteId],
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
@ -149,16 +152,6 @@ export class CoreFilepoolProvider {
|
|||
NgZone.run(() => this.checkQueueProcessing());
|
||||
});
|
||||
});
|
||||
|
||||
CoreEvents.on(CoreEvents.SITE_DELETED, async ({ siteId }) => {
|
||||
if (!siteId || !(siteId in this.filesTables)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await this.filesTables[siteId].destroy();
|
||||
|
||||
delete this.filesTables[siteId];
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -158,6 +158,7 @@ export class CoreSitesProvider {
|
|||
config: Partial<CoreDatabaseConfiguration>;
|
||||
database: SQLiteDB;
|
||||
primaryKeyColumns: PrimaryKeyColumn[];
|
||||
onDestroy(): void;
|
||||
}> = {},
|
||||
): Promise<CoreDatabaseTable<DBRecord, PrimaryKeyColumn>> {
|
||||
const siteId = options.siteId ?? this.getCurrentSiteId();
|
||||
|
@ -176,6 +177,8 @@ export class CoreSitesProvider {
|
|||
options.primaryKeyColumns,
|
||||
);
|
||||
|
||||
options.onDestroy && table.addListener({ onDestroy: options.onDestroy });
|
||||
|
||||
await table.initialize();
|
||||
|
||||
promisedTable.resolve(table as unknown as CoreDatabaseTable);
|
||||
|
@ -1833,16 +1836,19 @@ export class CoreSitesProvider {
|
|||
* @returns Scehmas Table.
|
||||
*/
|
||||
protected getSiteSchemasTable(site: CoreSite): AsyncInstance<CoreDatabaseTable<SchemaVersionsDBEntry, 'name'>> {
|
||||
this.schemasTables[site.getId()] = this.schemasTables[site.getId()] ?? asyncInstance(
|
||||
const siteId = site.getId();
|
||||
|
||||
this.schemasTables[siteId] = this.schemasTables[siteId] ?? asyncInstance(
|
||||
() => this.getSiteTable(SCHEMA_VERSIONS_TABLE_NAME, {
|
||||
siteId: site.getId(),
|
||||
siteId: siteId,
|
||||
database: site.getDb(),
|
||||
config: { cachingStrategy: CoreDatabaseCachingStrategy.Eager },
|
||||
primaryKeyColumns: ['name'],
|
||||
onDestroy: () => delete this.schemasTables[siteId],
|
||||
}),
|
||||
);
|
||||
|
||||
return this.schemasTables[site.getId()];
|
||||
return this.schemasTables[siteId];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue