X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fassets%2Fplayer%2Fpeertube-chunk-store.ts;h=e14e31c0466c23285eb4f68d64a2b08b5d7e3e5a;hb=2efd32f697549c59337db5177a93749af8e605d8;hp=84fbaf1460c16723746ef5ae0aef9a7a783838a7;hpb=17c49e60b367868c80f44b9921793dc3a2d9adaa;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/assets/player/peertube-chunk-store.ts b/client/src/assets/player/peertube-chunk-store.ts index 84fbaf146..e14e31c04 100644 --- a/client/src/assets/player/peertube-chunk-store.ts +++ b/client/src/assets/player/peertube-chunk-store.ts @@ -155,17 +155,17 @@ export class PeertubeChunkStore extends EventEmitter { this.cleanerInterval = null } + if (this.db) { + await this.db.close() + + await this.dropDatabase(this.databaseName) + } + if (this.expirationDB) { await this.expirationDB.close() this.expirationDB = null } - if (this.db) { - console.log('Destroying IndexDB database %s.', this.databaseName) - await this.db.close() - await this.db.delete() - } - return cb() } catch (err) { console.error('Cannot destroy peertube chunk store.', err) @@ -181,31 +181,42 @@ export class PeertubeChunkStore extends EventEmitter { }, PeertubeChunkStore.CLEANER_INTERVAL_MS) } - private checkExpiration () { - this.expirationDB.transaction('rw', this.expirationDB.databases, async () => { - // Update our database expiration since we are alive - await this.expirationDB.databases.put({ - name: this.databaseName, - expiration: new Date().getTime() + PeertubeChunkStore.CLEANER_EXPIRATION_MS - }) + private async checkExpiration () { + let databasesToDeleteInfo: { name: string }[] = [] - const now = new Date().getTime() - const databasesToDeleteInfo = await this.expirationDB.databases.where('expiration').below(now).toArray() + try { + await this.expirationDB.transaction('rw', this.expirationDB.databases, async () => { + // Update our database expiration since we are alive + await this.expirationDB.databases.put({ + name: this.databaseName, + expiration: new Date().getTime() + PeertubeChunkStore.CLEANER_EXPIRATION_MS + }) - for (const databaseToDeleteInfo of databasesToDeleteInfo) { - await this.dropDatabase(databaseToDeleteInfo.name) + const now = new Date().getTime() + databasesToDeleteInfo = await this.expirationDB.databases.where('expiration').below(now).toArray() + }) + } catch (err) { + console.error('Cannot update expiration of fetch expired databases.', err) + } - await this.expirationDB.databases.where({ name: databaseToDeleteInfo.name }).delete() - } - }).catch(err => console.error('Cannot check expiration.', err)) + for (const databaseToDeleteInfo of databasesToDeleteInfo) { + await this.dropDatabase(databaseToDeleteInfo.name) + } } - private dropDatabase (databaseName: string) { + private async dropDatabase (databaseName: string) { const dbToDelete = new ChunkDatabase(databaseName) + console.log('Destroying IndexDB database %s.', databaseName) - console.log('Deleting %s.', databaseName) - return dbToDelete.delete() - .catch(err => console.error('Cannot delete %s.', databaseName)) + try { + await dbToDelete.delete() + + await this.expirationDB.transaction('rw', this.expirationDB.databases, () => { + return this.expirationDB.databases.where({ name: databaseName }).delete() + }) + } catch (err) { + console.error('Cannot delete %s.', databaseName, err) + } } private nextTick (cb, err, val?) {