Server: fix thumbnail in remote videos
authorChocobozzz <florian.bigard@gmail.com>
Wed, 16 Nov 2016 20:16:41 +0000 (21:16 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Wed, 16 Nov 2016 20:16:41 +0000 (21:16 +0100)
server/controllers/api/remote.js
server/models/video.js

index 4085deb2d7e46309fc0257e5d1f35271c1e3d6c5..3e2aa6375f85df19c10e9d0bc358886e83897633 100644 (file)
@@ -55,11 +55,15 @@ function remoteVideos (req, res, next) {
 function addRemoteVideo (videoToCreateData, callback) {
   logger.debug('Adding remote video %s.', videoToCreateData.magnetUri)
 
-  // Mongoose pre hook will automatically create the thumbnail on disk
-  videoToCreateData.thumbnail = videoToCreateData.thumbnailBase64
-
   const video = new Video(videoToCreateData)
-  video.save(callback)
+  Video.generateThumbnailFromBase64(video, videoToCreateData.thumbnailBase64, function (err) {
+    if (err) {
+      logger.error('Cannot generate thumbnail from base 64 data.', { error: err })
+      return callback(err)
+    }
+
+    video.save(callback)
+  })
 }
 
 function removeRemoteVideo (videoToRemoveData, fromHost, callback) {
index d7d99acd6fb08181ba027048d99ac1cbeeb186c0..527652230c66311eaced4c8fc197f112cd84ef7d 100644 (file)
@@ -57,6 +57,7 @@ VideoSchema.methods = {
 }
 
 VideoSchema.statics = {
+  generateThumbnailFromBase64,
   getDurationFromFile,
   listForApi,
   listByHostAndRemoteId,
@@ -136,10 +137,10 @@ VideoSchema.pre('save', function (next) {
       }
     )
 
-    parallel(tasks, next)
-  } else {
-    generateThumbnailFromBase64(video, video.thumbnail, next)
+    return parallel(tasks, next)
   }
+
+  return next()
 })
 
 mongoose.model('Video', VideoSchema)
@@ -251,6 +252,18 @@ function toRemoteJSON (callback) {
 
 // ------------------------------ STATICS ------------------------------
 
+function generateThumbnailFromBase64 (video, thumbnailData, callback) {
+  // Creating the thumbnail for a remote video
+
+  const thumbnailName = video.getThumbnailName()
+  const thumbnailPath = constants.CONFIG.STORAGE.THUMBNAILS_DIR + thumbnailName
+  fs.writeFile(thumbnailPath, thumbnailData, { encoding: 'base64' }, function (err) {
+    if (err) return callback(err)
+
+    return callback(null, thumbnailName)
+  })
+}
+
 function getDurationFromFile (videoPath, callback) {
   ffmpeg.ffprobe(videoPath, function (err, metadata) {
     if (err) return callback(err)
@@ -333,18 +346,6 @@ function createThumbnail (video, videoPath, callback) {
   generateImage(video, videoPath, constants.CONFIG.STORAGE.THUMBNAILS_DIR, video.getThumbnailName(), constants.THUMBNAILS_SIZE, callback)
 }
 
-function generateThumbnailFromBase64 (video, thumbnailData, callback) {
-  // Creating the thumbnail for this remote video)
-
-  const thumbnailName = video.getThumbnailName()
-  const thumbnailPath = constants.CONFIG.STORAGE.THUMBNAILS_DIR + thumbnailName
-  fs.writeFile(thumbnailPath, thumbnailData, { encoding: 'base64' }, function (err) {
-    if (err) return callback(err)
-
-    return callback(null, thumbnailName)
-  })
-}
-
 function generateImage (video, videoPath, folder, imageName, size, callback) {
   const options = {
     filename: imageName,