import { sha1 } from '../../helpers/core-utils'
import { isArrayOf } from '../../helpers/custom-validators/misc'
import { Op, QueryTypes } from 'sequelize'
-import { MStreamingPlaylist, MVideoFile } from '@server/typings/models'
+import { MStreamingPlaylist, MStreamingPlaylistVideo, MVideoFile } from '@server/types/models'
import { VideoFileModel } from '@server/models/video/video-file'
-import { getTorrentFileName, getVideoFilename } from '@server/lib/video-paths'
+import { getTorrentFileName, getTorrentFilePath, getVideoFilename } from '@server/lib/video-paths'
import * as memoizee from 'memoizee'
+import { remove } from 'fs-extra'
+import { logger } from '@server/helpers/logger'
@Table({
tableName: 'videoStreamingPlaylist',
return VideoStreamingPlaylistModel.findByPk(id, options)
}
+ static loadHLSPlaylistByVideo (videoId: number) {
+ const options = {
+ where: {
+ type: VideoStreamingPlaylistType.HLS,
+ videoId
+ }
+ }
+
+ return VideoStreamingPlaylistModel.findOne(options)
+ }
+
static getHlsPlaylistFilename (resolution: number) {
return resolution + '.m3u8'
}
return join(STATIC_PATHS.STREAMING_PLAYLISTS.HLS, videoUUID, VideoStreamingPlaylistModel.getHlsPlaylistFilename(resolution))
}
- static getHlsSha256SegmentsStaticPath (videoUUID: string) {
+ static getHlsSha256SegmentsStaticPath (videoUUID: string, isLive: boolean) {
+ if (isLive) return join('/live', 'segments-sha256', videoUUID)
+
return join(STATIC_PATHS.STREAMING_PLAYLISTS.HLS, videoUUID, VideoStreamingPlaylistModel.getHlsSha256SegmentsFilename())
}
return this.type === other.type &&
this.videoId === other.videoId
}
+
+ removeTorrent (this: MStreamingPlaylistVideo, videoFile: MVideoFile) {
+ const torrentPath = getTorrentFilePath(this, videoFile)
+ return remove(torrentPath)
+ .catch(err => logger.warn('Cannot delete torrent %s.', torrentPath, { err }))
+ }
}