X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo.ts;h=6b75fadb0ad71307b5219dd224d0dcecf531aecd;hb=00b87c5791ecd645bb78cbb9872d60e1f957bdfa;hp=8d9918b2d9315465aab3bd8d5aa12bdf77115c46;hpb=97969c4edf51b37eee691adba43368bb0fbb729b;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video.ts b/server/lib/video.ts index 8d9918b2d..6b75fadb0 100644 --- a/server/lib/video.ts +++ b/server/lib/video.ts @@ -1,11 +1,13 @@ import { Transaction } from 'sequelize/types' +import { DEFAULT_AUDIO_RESOLUTION, JOB_PRIORITY } from '@server/initializers/constants' import { sequelizeTypescript } from '@server/initializers/database' import { TagModel } from '@server/models/video/tag' import { VideoModel } from '@server/models/video/video' import { FilteredModelAttributes } from '@server/types' -import { MTag, MThumbnail, MVideoTag, MVideoThumbnail, MVideoUUID } from '@server/types/models' -import { ThumbnailType, VideoCreate, VideoPrivacy, VideoState } from '@shared/models' +import { MTag, MThumbnail, MUserId, MVideo, MVideoFile, MVideoTag, MVideoThumbnail, MVideoUUID } from '@server/types/models' +import { ThumbnailType, VideoCreate, VideoPrivacy, VideoTranscodingPayload } from '@shared/models' import { federateVideoIfNeeded } from './activitypub/videos' +import { JobQueue } from './job-queue/job-queue' import { Notifier } from './notifier' import { createVideoMiniatureFromExisting } from './thumbnail' @@ -104,11 +106,47 @@ async function publishAndFederateIfNeeded (video: MVideoUUID, wasLive = false) { } } +async function addOptimizeOrMergeAudioJob (video: MVideo, videoFile: MVideoFile, user: MUserId) { + let dataInput: VideoTranscodingPayload + + if (videoFile.isAudio()) { + dataInput = { + type: 'merge-audio-to-webtorrent', + resolution: DEFAULT_AUDIO_RESOLUTION, + videoUUID: video.uuid, + isNewVideo: true + } + } else { + dataInput = { + type: 'optimize-to-webtorrent', + videoUUID: video.uuid, + isNewVideo: true + } + } + + const jobOptions = { + priority: JOB_PRIORITY.TRANSCODING.OPTIMIZER + await getJobTranscodingPriorityMalus(user) + } + + return JobQueue.Instance.createJobWithPromise({ type: 'video-transcoding', payload: dataInput }, jobOptions) +} + +async function getJobTranscodingPriorityMalus (user: MUserId) { + const now = new Date() + const lastWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 7) + + const videoUploadedByUser = await VideoModel.countVideosUploadedByUserSince(user.id, lastWeek) + + return videoUploadedByUser +} + // --------------------------------------------------------------------------- export { buildLocalVideoFromReq, publishAndFederateIfNeeded, buildVideoThumbnailsFromReq, - setVideoTags + setVideoTags, + addOptimizeOrMergeAudioJob, + getJobTranscodingPriorityMalus }