X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-live.ts;h=d2788ef4f7d16d2fbd3b2aa933f9065309a47374;hb=ba2684ceddf9b76312635b9cddc6bf6975ce436a;hp=6929b96886cd48270c4c1aee80a4d393e2b140e5;hpb=c6c0fa6cd8fe8f752463d8982c3dbcd448739c4e;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-live.ts b/server/models/video/video-live.ts index 6929b9688..d2788ef4f 100644 --- a/server/models/video/video-live.ts +++ b/server/models/video/video-live.ts @@ -1,14 +1,23 @@ import { AllowNull, BelongsTo, Column, CreatedAt, DataType, DefaultScope, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript' +import { CONFIG } from '@server/initializers/config' import { WEBSERVER } from '@server/initializers/constants' import { MVideoLive, MVideoLiveVideo } from '@server/types/models' -import { VideoLive } from '@shared/models/videos/video-live.model' +import { LiveVideo, LiveVideoLatencyMode, VideoState } from '@shared/models' +import { AttributesOnly } from '@shared/typescript-utils' import { VideoModel } from './video' +import { VideoBlacklistModel } from './video-blacklist' @DefaultScope(() => ({ include: [ { model: VideoModel, - required: true + required: true, + include: [ + { + model: VideoBlacklistModel, + required: false + } + ] } ] })) @@ -21,12 +30,24 @@ import { VideoModel } from './video' } ] }) -export class VideoLiveModel extends Model { +export class VideoLiveModel extends Model>> { - @AllowNull(false) + @AllowNull(true) @Column(DataType.STRING) streamKey: string + @AllowNull(false) + @Column + saveReplay: boolean + + @AllowNull(false) + @Column + permanentLive: boolean + + @AllowNull(false) + @Column + latencyMode: LiveVideoLatencyMode + @CreatedAt createdAt: Date @@ -49,7 +70,22 @@ export class VideoLiveModel extends Model { const query = { where: { streamKey - } + }, + include: [ + { + model: VideoModel.unscoped(), + required: true, + where: { + state: VideoState.WAITING_FOR_LIVE + }, + include: [ + { + model: VideoBlacklistModel.unscoped(), + required: false + } + ] + } + ] } return VideoLiveModel.findOne(query) @@ -65,10 +101,31 @@ export class VideoLiveModel extends Model { return VideoLiveModel.findOne(query) } - toFormattedJSON (): VideoLive { + toFormattedJSON (canSeePrivateInformation: boolean): LiveVideo { + let privateInformation: Pick | {} = {} + + // If we don't have a stream key, it means this is a remote live so we don't specify the rtmp URL + // We also display these private information only to the live owne/moderators + if (this.streamKey && canSeePrivateInformation === true) { + privateInformation = { + streamKey: this.streamKey, + + rtmpUrl: CONFIG.LIVE.RTMP.ENABLED + ? WEBSERVER.RTMP_URL + : null, + + rtmpsUrl: CONFIG.LIVE.RTMPS.ENABLED + ? WEBSERVER.RTMPS_URL + : null + } + } + return { - rtmpUrl: WEBSERVER.RTMP_URL, - streamKey: this.streamKey + ...privateInformation, + + permanentLive: this.permanentLive, + saveReplay: this.saveReplay, + latencyMode: this.latencyMode } } }