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,
}
]
})
-export class VideoFileModel extends Model {
+export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel>>> {
@CreatedAt
createdAt: Date
return VideoFileModel.destroy(options)
}
+ hasTorrent () {
+ return this.infoHash && this.torrentFilename
+ }
+
getVideoOrStreamingPlaylist (this: MVideoFileVideo | MVideoFileStreamingPlaylistVideo): MVideo | MStreamingPlaylistVideo {
if (this.videoId) return (this as MVideoFileVideo).Video
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) {
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 }))