Handle thumbnail update
authorChocobozzz <me@florianbigard.com>
Wed, 14 Feb 2018 14:33:49 +0000 (15:33 +0100)
committerChocobozzz <me@florianbigard.com>
Wed, 14 Feb 2018 15:03:09 +0000 (16:03 +0100)
server.ts
server/controllers/api/videos/index.ts
server/helpers/logger.ts
server/lib/activitypub/process/process-update.ts
server/middlewares/async.ts

index 529194a5ebd70535a9e67ca2d57d54108273274e..c19ec4f194b7e01add2d3a112880af44cedf1734 100644 (file)
--- a/server.ts
+++ b/server.ts
@@ -158,8 +158,13 @@ app.use(function (req, res, next) {
 })
 
 app.use(function (err, req, res, next) {
-  logger.error('Error in controller.', { error: err.stack || err.message || err })
-  res.sendStatus(err.status || 500)
+  let error = 'Unknown error.'
+  if (err) {
+    error = err.stack || err.message || err
+  }
+
+  logger.error('Error in controller.', { error })
+  return res.status(err.status || 500).end()
 })
 
 // ----------- Run -----------
index 1a4de081f49fce7a117065c50f1c0fd14c191d0b..10b6c000f74168a807246878d989ecd835dd42bb 100644 (file)
@@ -195,7 +195,10 @@ async function addVideo (req: express.Request, res: express.Response, videoPhysi
   const videoFile = new VideoFileModel(videoFileData)
   const videoDir = CONFIG.STORAGE.VIDEOS_DIR
   const destination = join(videoDir, video.getVideoFilename(videoFile))
+
   await renamePromise(videoPhysicalFile.path, destination)
+  // This is important in case if there is another attempt in the retry process
+  videoPhysicalFile.filename = video.getVideoFilename(videoFile)
 
   // Process thumbnail or create it from the video
   const thumbnailField = req.files['thumbnailfile']
index 201ea2235cd39ac36b620b7a48b6c260c9df53f6..bcd4885af961a9a1a087ab98806fc46bb158da36 100644 (file)
@@ -21,7 +21,7 @@ function keysExcluder (key, value) {
   return excludedKeys[key] === true ? undefined : value
 }
 
-const loggerFormat = winston.format.printf((info) => {
+const loggerFormat = winston.format.printf(info => {
   let additionalInfos = JSON.stringify(info, keysExcluder, 2)
   if (additionalInfos === '{}') additionalInfos = ''
   else additionalInfos = ' ' + additionalInfos
index c0038be64b5a36722a1c94874660fddc84414d08..c7ad412bc37b9f5eae78f3df4abd634c19ee4483 100644 (file)
@@ -11,7 +11,10 @@ import { ActorModel } from '../../../models/activitypub/actor'
 import { TagModel } from '../../../models/video/tag'
 import { VideoFileModel } from '../../../models/video/video-file'
 import { fetchAvatarIfExists, getOrCreateActorAndServerAndModel, updateActorAvatarInstance, updateActorInstance } from '../actor'
-import { getOrCreateAccountAndVideoAndChannel, videoActivityObjectToDBAttributes, videoFileActivityUrlToDBAttributes } from '../videos'
+import {
+  generateThumbnailFromUrl, getOrCreateAccountAndVideoAndChannel, videoActivityObjectToDBAttributes,
+  videoFileActivityUrlToDBAttributes
+} from '../videos'
 
 async function processUpdateActivity (activity: ActivityUpdate) {
   const actor = await getOrCreateActorAndServerAndModel(activity.actor)
@@ -82,6 +85,10 @@ async function updateRemoteVideo (actor: ActorModel, activity: ActivityUpdate) {
 
       await videoInstance.save(sequelizeOptions)
 
+      // Don't block on request
+      generateThumbnailFromUrl(videoInstance, videoAttributesToUpdate.icon)
+        .catch(err => logger.warn('Cannot generate thumbnail of %s.', videoAttributesToUpdate.id, err))
+
       // Remove old video files
       const videoFileDestroyTasks: Bluebird<void>[] = []
       for (const videoFile of videoInstance.VideoFiles) {
index 534891899cab0364af5a41a0a37bf82a5b1dcf9c..dd209b115d2d46cb4701896dbdf5900e7c9d13a8 100644 (file)
@@ -11,12 +11,12 @@ function asyncMiddleware (fun: RequestPromiseHandler | RequestPromiseHandler[])
     if (Array.isArray(fun) === true) {
       return eachSeries(fun as RequestHandler[], (f, cb) => {
         Promise.resolve(f(req, res, cb))
-          .catch(next)
+          .catch(err => next(err))
       }, next)
     }
 
     return Promise.resolve((fun as RequestHandler)(req, res, next))
-      .catch(next)
+      .catch(err => next(err))
   }
 }