From c77fa067a18a1fea34d5f277da19c2e4712018fa Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 16 Nov 2016 21:16:41 +0100 Subject: [PATCH] Server: fix thumbnail in remote videos --- server/controllers/api/remote.js | 12 ++++++++---- server/models/video.js | 31 ++++++++++++++++--------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/server/controllers/api/remote.js b/server/controllers/api/remote.js index 4085deb2d..3e2aa6375 100644 --- a/server/controllers/api/remote.js +++ b/server/controllers/api/remote.js @@ -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) { diff --git a/server/models/video.js b/server/models/video.js index d7d99acd6..527652230 100644 --- a/server/models/video.js +++ b/server/models/video.js @@ -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, -- 2.41.0