- static async loadOrGenerate (video: MVideo) {
- let playlist = await VideoStreamingPlaylistModel.loadHLSPlaylistByVideo(video.id)
- if (!playlist) playlist = new VideoStreamingPlaylistModel()
+ static async loadOrGenerate (video: MVideo, transaction?: Transaction) {
+ let playlist = await VideoStreamingPlaylistModel.loadHLSPlaylistByVideo(video.id, transaction)
+
+ if (!playlist) {
+ playlist = new VideoStreamingPlaylistModel({
+ p2pMediaLoaderPeerVersion: P2P_MEDIA_LOADER_PEER_VERSION,
+ type: VideoStreamingPlaylistType.HLS,
+ storage: VideoStorage.FILE_SYSTEM,
+ p2pMediaLoaderInfohashes: [],
+ playlistFilename: generateHLSMasterPlaylistFilename(video.isLive),
+ segmentsSha256Filename: generateHlsSha256SegmentsFilename(video.isLive),
+ videoId: video.id
+ })
+
+ await playlist.save({ transaction })
+ }
+
+ return Object.assign(playlist, { Video: video })
+ }
+
+ static doesOwnedHLSPlaylistExist (videoUUID: string) {
+ const query = `SELECT 1 FROM "videoStreamingPlaylist" ` +
+ `INNER JOIN "video" ON "video"."id" = "videoStreamingPlaylist"."videoId" ` +
+ `AND "video"."remote" IS FALSE AND "video"."uuid" = $videoUUID ` +
+ `AND "storage" = ${VideoStorage.FILE_SYSTEM} LIMIT 1`