+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
+}
+