]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Don't fail on upload if we cannot generate thumbnail
authorChocobozzz <me@florianbigard.com>
Tue, 27 Feb 2018 12:46:56 +0000 (13:46 +0100)
committerChocobozzz <me@florianbigard.com>
Tue, 27 Feb 2018 12:46:56 +0000 (13:46 +0100)
server/helpers/ffmpeg-utils.ts
server/lib/schedulers/bad-actor-follow-scheduler.ts
server/lib/schedulers/remove-old-jobs-scheduler.ts

index 57911bc7313ec071089e13fef4efb52e4883411a..b0f95797cbeb6aca71b20e460c7ea07208fccee9 100644 (file)
@@ -1,8 +1,10 @@
 import * as ffmpeg from 'fluent-ffmpeg'
+import { join } from 'path'
 import { VideoResolution } from '../../shared/models/videos'
 import { CONFIG, MAX_VIDEO_TRANSCODING_FPS } from '../initializers'
+import { unlinkPromise } from './core-utils'
 import { processImage } from './image-utils'
-import { join } from 'path'
+import { logger } from './logger'
 
 async function getVideoFileHeight (path: string) {
   const videoStream = await getVideoFileStream(path)
@@ -45,16 +47,27 @@ async function generateImageFromVideoFile (fromPath: string, folder: string, ima
     folder
   }
 
-  await new Promise<string>((res, rej) => {
-    ffmpeg(fromPath)
-      .on('error', rej)
-      .on('end', () => res(imageName))
-      .thumbnail(options)
-  })
-
   const pendingImagePath = join(folder, pendingImageName)
-  const destination = join(folder, imageName)
-  await processImage({ path: pendingImagePath }, destination, size)
+
+  try {
+    await new Promise<string>((res, rej) => {
+      ffmpeg(fromPath)
+        .on('error', rej)
+        .on('end', () => res(imageName))
+        .thumbnail(options)
+    })
+
+    const destination = join(folder, imageName)
+    await processImage({ path: pendingImagePath }, destination, size)
+  } catch (err) {
+    logger.error('Cannot generate image from video %s.', fromPath, err)
+
+    try {
+      await unlinkPromise(pendingImagePath)
+    } catch (err) {
+      logger.debug('Cannot remove pending image path after generation error.', err)
+    }
+  }
 }
 
 type TranscodeOptions = {
index 397eb470ec2551465109d018fe76648bc2fb7228..9b9f9e17ddf9a2e5ca40c3a754cdecc41d5a49dc 100644 (file)
@@ -1,3 +1,4 @@
+import { isTestInstance } from '../../helpers/core-utils'
 import { logger } from '../../helpers/logger'
 import { ActorFollowModel } from '../../models/activitypub/actor-follow'
 import { AbstractScheduler } from './abstract-scheduler'
@@ -11,7 +12,7 @@ export class BadActorFollowScheduler extends AbstractScheduler {
   }
 
   async execute () {
-    logger.info('Removing bad actor follows (scheduler).')
+    if (!isTestInstance()) logger.info('Removing bad actor follows (scheduler).')
 
     try {
       await ActorFollowModel.removeBadActorFollows()
index 51fcf711eaff66b7d68663b711006ce70f126f99..0e8ad155443a8f87d030d6a1dfbb067620b4b2c0 100644 (file)
@@ -1,3 +1,4 @@
+import { isTestInstance } from '../../helpers/core-utils'
 import { logger } from '../../helpers/logger'
 import { JobQueue } from '../job-queue'
 import { AbstractScheduler } from './abstract-scheduler'
@@ -11,7 +12,7 @@ export class RemoveOldJobsScheduler extends AbstractScheduler {
   }
 
   async execute () {
-    logger.info('Removing old jobs (scheduler).')
+    if (!isTestInstance()) logger.info('Removing old jobs (scheduler).')
 
     JobQueue.Instance.removeOldJobs()
   }