X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-streaming-playlist.ts;h=f587989dcddf8678895a2d3caa609968c261a95f;hb=b42c2c7e89a64ed730d8140840fe74a13c31f2a4;hp=9957ffee3c3b3d1a4dea8bef5ed6338769ad615a;hpb=f304a1580b5ce7b6c5f9e25cd3ddc63ca8d8c6a1;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-streaming-playlist.ts b/server/models/video/video-streaming-playlist.ts index 9957ffee3..f587989dc 100644 --- a/server/models/video/video-streaming-playlist.ts +++ b/server/models/video/video-streaming-playlist.ts @@ -1,6 +1,6 @@ import memoizee from 'memoizee' import { join } from 'path' -import { Op } from 'sequelize' +import { Op, Transaction } from 'sequelize' import { AllowNull, BelongsTo, @@ -16,8 +16,9 @@ import { UpdatedAt } from 'sequelize-typescript' import { getHLSPublicFileUrl } from '@server/lib/object-storage' +import { generateHLSMasterPlaylistFilename, generateHlsSha256SegmentsFilename } from '@server/lib/paths' import { VideoFileModel } from '@server/models/video/video-file' -import { MStreamingPlaylist, MVideo } from '@server/types/models' +import { MStreamingPlaylist, MStreamingPlaylistFilesVideo, MVideo } from '@server/types/models' import { sha1 } from '@shared/extra-utils' import { VideoStorage } from '@shared/models' import { AttributesOnly } from '@shared/typescript-utils' @@ -167,6 +168,22 @@ export class VideoStreamingPlaylistModel extends Model(id, options) + } + static loadWithVideo (id: number) { const options = { include: [ @@ -180,22 +197,36 @@ export class VideoStreamingPlaylistModel extends Model { + static loadHLSPlaylistByVideo (videoId: number, transaction?: Transaction): Promise { const options = { where: { type: VideoStreamingPlaylistType.HLS, videoId - } + }, + transaction } return VideoStreamingPlaylistModel.findOne(options) } - 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, { videoId: video.id, Video: video }) + return Object.assign(playlist, { Video: video }) } static doesOwnedHLSPlaylistExist (videoUUID: string) {