]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-file.ts
Merge branch 'release/3.2.0' into develop
[github/Chocobozzz/PeerTube.git] / server / models / video / video-file.ts
index 57807cbfd21aadcd9acc1c5935bd72cc5cd16105..22cf638046afb6e3fb1ee0bf2e33285cc5484859 100644 (file)
@@ -25,6 +25,7 @@ import { logger } from '@server/helpers/logger'
 import { extractVideo } from '@server/helpers/video'
 import { getTorrentFilePath } from '@server/lib/video-paths'
 import { MStreamingPlaylistVideo, MVideo, MVideoWithHost } from '@server/types/models'
+import { AttributesOnly } from '@shared/core-utils'
 import {
   isVideoFileExtnameValid,
   isVideoFileInfoHashValid,
@@ -149,7 +150,7 @@ export enum ScopeNames {
     }
   ]
 })
-export class VideoFileModel extends Model {
+export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel>>> {
   @CreatedAt
   createdAt: Date
 
@@ -401,6 +402,10 @@ export class VideoFileModel extends Model {
     return VideoFileModel.destroy(options)
   }
 
+  hasTorrent () {
+    return this.infoHash && this.torrentFilename
+  }
+
   getVideoOrStreamingPlaylist (this: MVideoFileVideo | MVideoFileStreamingPlaylistVideo): MVideo | MStreamingPlaylistVideo {
     if (this.videoId) return (this as MVideoFileVideo).Video
 
@@ -423,14 +428,12 @@ export class VideoFileModel extends Model {
     return !!this.videoStreamingPlaylistId
   }
 
-  getFileUrl (video: MVideoWithHost) {
+  getFileUrl (video: MVideo) {
     if (!this.Video) this.Video = video as VideoModel
 
     if (video.isOwned()) return WEBSERVER.URL + this.getFileStaticPath(video)
-    if (this.fileUrl) return this.fileUrl
 
-    // Fallback if we don't have a file URL
-    return buildRemoteVideoBaseUrl(video, this.getFileStaticPath(video))
+    return this.fileUrl
   }
 
   getFileStaticPath (video: MVideo) {
@@ -451,29 +454,34 @@ export class VideoFileModel extends Model {
     return buildRemoteVideoBaseUrl(video, path)
   }
 
-  getRemoteTorrentUrl (video: MVideoWithHost) {
+  getRemoteTorrentUrl (video: MVideo) {
     if (video.isOwned()) throw new Error(`Video ${video.url} is not a remote video`)
 
-    if (this.torrentUrl) return this.torrentUrl
-
-    // Fallback if we don't have a torrent URL
-    return buildRemoteVideoBaseUrl(video, this.getTorrentStaticPath())
+    return this.torrentUrl
   }
 
   // We proxify torrent requests so use a local URL
   getTorrentUrl () {
+    if (!this.torrentFilename) return null
+
     return WEBSERVER.URL + this.getTorrentStaticPath()
   }
 
   getTorrentStaticPath () {
+    if (!this.torrentFilename) return null
+
     return join(LAZY_STATIC_PATHS.TORRENTS, this.torrentFilename)
   }
 
   getTorrentDownloadUrl () {
+    if (!this.torrentFilename) return null
+
     return WEBSERVER.URL + join(STATIC_DOWNLOAD_PATHS.TORRENTS, this.torrentFilename)
   }
 
   removeTorrent () {
+    if (!this.torrentFilename) return null
+
     const torrentPath = getTorrentFilePath(this)
     return remove(torrentPath)
       .catch(err => logger.warn('Cannot delete torrent %s.', torrentPath, { err }))