]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/assets/player/peertube-chunk-store.ts
Fix updating video tags to empty field
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / peertube-chunk-store.ts
index 84fbaf1460c16723746ef5ae0aef9a7a783838a7..e14e31c0466c23285eb4f68d64a2b08b5d7e3e5a 100644 (file)
@@ -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?) {