X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fvideos%2Findex.ts;h=5ebd8fbc4903b852c3b2c389be1280da30838085;hb=b6a1dd4d1b3b0032f8b968e72cbd074f646e8827;hp=1a18a8ae80993da568d81f9490d6015bfe4026de;hpb=2b4dd7e26d93c2d9bef4f365cb03c511eff4ca8f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 1a18a8ae8..5ebd8fbc4 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -6,7 +6,14 @@ import { logger } from '../../../helpers/logger' import { auditLoggerFactory, getAuditIdFromRes, VideoAuditView } from '../../../helpers/audit-logger' import { getFormattedObjects, getServerActor } from '../../../helpers/utils' import { autoBlacklistVideoIfNeeded } from '../../../lib/video-blacklist' -import { MIMETYPES, VIDEO_CATEGORIES, VIDEO_LANGUAGES, VIDEO_LICENCES, VIDEO_PRIVACIES } from '../../../initializers/constants' +import { + DEFAULT_AUDIO_RESOLUTION, + MIMETYPES, + VIDEO_CATEGORIES, + VIDEO_LANGUAGES, + VIDEO_LICENCES, + VIDEO_PRIVACIES +} from '../../../initializers/constants' import { changeVideoChannelShare, federateVideoIfNeeded, @@ -54,6 +61,7 @@ import { CONFIG } from '../../../initializers/config' import { sequelizeTypescript } from '../../../initializers/database' import { createVideoMiniatureFromExisting, generateVideoMiniature } from '../../../lib/thumbnail' import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type' +import { VideoTranscodingPayload } from '../../../lib/job-queue/handlers/video-transcoding' const auditLogger = auditLoggerFactory('videos') const videosRouter = express.Router() @@ -191,17 +199,17 @@ async function addVideo (req: express.Request, res: express.Response) { const video = new VideoModel(videoData) video.url = getVideoActivityPubUrl(video) // We use the UUID, so set the URL after building the object - // Build the file object - const { videoFileResolution } = await getVideoFileResolution(videoPhysicalFile.path) - const fps = await getVideoFileFPS(videoPhysicalFile.path) - - const videoFileData = { + const videoFile = new VideoFileModel({ extname: extname(videoPhysicalFile.filename), - resolution: videoFileResolution, - size: videoPhysicalFile.size, - fps + size: videoPhysicalFile.size + }) + + if (videoFile.isAudio()) { + videoFile.resolution = DEFAULT_AUDIO_RESOLUTION + } else { + videoFile.fps = await getVideoFileFPS(videoPhysicalFile.path) + videoFile.resolution = (await getVideoFileResolution(videoPhysicalFile.path)).videoFileResolution } - const videoFile = new VideoFileModel(videoFileData) // Move physical file const videoDir = CONFIG.STORAGE.VIDEOS_DIR @@ -279,9 +287,21 @@ async function addVideo (req: express.Request, res: express.Response) { if (video.state === VideoState.TO_TRANSCODE) { // Put uuid because we don't have id auto incremented for now - const dataInput = { - videoUUID: videoCreated.uuid, - isNewVideo: true + let dataInput: VideoTranscodingPayload + + if (videoFile.isAudio()) { + dataInput = { + type: 'merge-audio' as 'merge-audio', + resolution: DEFAULT_AUDIO_RESOLUTION, + videoUUID: videoCreated.uuid, + isNewVideo: true + } + } else { + dataInput = { + type: 'optimize' as 'optimize', + videoUUID: videoCreated.uuid, + isNewVideo: true + } } await JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput }) @@ -300,7 +320,9 @@ async function updateVideo (req: express.Request, res: express.Response) { const videoFieldsSave = videoInstance.toJSON() const oldVideoAuditView = new VideoAuditView(videoInstance.toFormattedDetailsJSON()) const videoInfoToUpdate: VideoUpdate = req.body + const wasPrivateVideo = videoInstance.privacy === VideoPrivacy.PRIVATE + const wasNotPrivateVideo = videoInstance.privacy !== VideoPrivacy.PRIVATE const wasUnlistedVideo = videoInstance.privacy === VideoPrivacy.UNLISTED // Process thumbnail or create it from the video @@ -336,9 +358,15 @@ async function updateVideo (req: express.Request, res: express.Response) { const newPrivacy = parseInt(videoInfoToUpdate.privacy.toString(), 10) videoInstance.privacy = newPrivacy + // The video was private, and is not anymore -> publish it if (wasPrivateVideo === true && newPrivacy !== VideoPrivacy.PRIVATE) { videoInstance.publishedAt = new Date() } + + // The video was not private, but now it is -> we need to unfederate it + if (wasNotPrivateVideo === true && newPrivacy === VideoPrivacy.PRIVATE) { + await VideoModel.sendDelete(videoInstance, { transaction: t }) + } } const videoInstanceUpdated = await videoInstance.save(sequelizeOptions)