]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video.ts
Remove HLS torrents
[github/Chocobozzz/PeerTube.git] / server / models / video / video.ts
index 243871028a4a9526adc692befbbcb281d9cd0b0e..eacffe1864156d84d84e0cc2ee817c892cd354ae 100644 (file)
@@ -136,7 +136,8 @@ import {
   MVideoThumbnailBlacklist,
   MVideoWithAllFiles,
   MVideoWithFile,
-  MVideoWithRights
+  MVideoWithRights,
+  MStreamingPlaylistFiles
 } from '../../typings/models'
 import { MVideoFile, MVideoFileStreamingPlaylistVideo } from '../../typings/models/video/video-file'
 import { MThumbnail } from '../../typings/models/video/thumbnail'
@@ -1071,7 +1072,13 @@ export class VideoModel extends Model<VideoModel> {
       })
 
       // Remove playlists file
-      tasks.push(instance.removeStreamingPlaylist())
+      if (!Array.isArray(instance.VideoStreamingPlaylists)) {
+        instance.VideoStreamingPlaylists = await instance.$get('VideoStreamingPlaylists')
+      }
+
+      for (const p of instance.VideoStreamingPlaylists) {
+        tasks.push(instance.removeStreamingPlaylistFiles(p))
+      }
     }
 
     // Do not wait video deletion because we could be in a transaction
@@ -2001,11 +2008,24 @@ export class VideoModel extends Model<VideoModel> {
       .catch(err => logger.warn('Cannot delete torrent %s.', torrentPath, { err }))
   }
 
-  removeStreamingPlaylist (isRedundancy = false) {
+  async removeStreamingPlaylistFiles (streamingPlaylist: MStreamingPlaylist, isRedundancy = false) {
     const directoryPath = getHLSDirectory(this, isRedundancy)
 
-    return remove(directoryPath)
-      .catch(err => logger.warn('Cannot delete playlist directory %s.', directoryPath, { err }))
+    await remove(directoryPath)
+
+    if (isRedundancy !== true) {
+      let streamingPlaylistWithFiles = streamingPlaylist as MStreamingPlaylistFilesVideo
+      streamingPlaylistWithFiles.Video = this
+
+      if (!Array.isArray(streamingPlaylistWithFiles.VideoFiles)) {
+        streamingPlaylistWithFiles.VideoFiles = await streamingPlaylistWithFiles.$get('VideoFiles')
+      }
+
+      // Remove physical files and torrents
+      await Promise.all(
+        streamingPlaylistWithFiles.VideoFiles.map(file => streamingPlaylistWithFiles.removeTorrent(file))
+      )
+    }
   }
 
   isOutdated () {