aboutsummaryrefslogtreecommitdiffhomepage
path: root/server
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-11-19 11:24:31 +0100
committerChocobozzz <me@florianbigard.com>2018-11-19 14:34:36 +0100
commita8a63227781c6815532cb7a68699b08fdb0368be (patch)
tree6383e14156012b9366d0d1c2039262574fab2fc4 /server
parent9d0b856e930ee1c676d16a56408a3e4a18f8f978 (diff)
downloadPeerTube-a8a63227781c6815532cb7a68699b08fdb0368be.tar.gz
PeerTube-a8a63227781c6815532cb7a68699b08fdb0368be.tar.zst
PeerTube-a8a63227781c6815532cb7a68699b08fdb0368be.zip
Optimize image resizing
Diffstat (limited to 'server')
-rw-r--r--server/helpers/image-utils.ts19
-rw-r--r--server/lib/activitypub/videos.ts10
2 files changed, 23 insertions, 6 deletions
diff --git a/server/helpers/image-utils.ts b/server/helpers/image-utils.ts
index 3eaa674ed..da3285b13 100644
--- a/server/helpers/image-utils.ts
+++ b/server/helpers/image-utils.ts
@@ -1,13 +1,28 @@
1import 'multer' 1import 'multer'
2import * as sharp from 'sharp' 2import * as sharp from 'sharp'
3import { remove } from 'fs-extra' 3import { move, remove } from 'fs-extra'
4 4
5async function processImage ( 5async function processImage (
6 physicalFile: { path: string }, 6 physicalFile: { path: string },
7 destination: string, 7 destination: string,
8 newSize: { width: number, height: number } 8 newSize: { width: number, height: number }
9) { 9) {
10 await sharp(physicalFile.path) 10 if (physicalFile.path === destination) {
11 throw new Error('Sharp needs an input path different that the output path.')
12 }
13
14 const sharpInstance = sharp(physicalFile.path)
15 const metadata = await sharpInstance.metadata()
16
17 // No need to resize
18 if (metadata.width === newSize.width && metadata.height === newSize.height) {
19 await move(physicalFile.path, destination, { overwrite: true })
20 return
21 }
22
23 await remove(destination)
24
25 await sharpInstance
11 .resize(newSize.width, newSize.height) 26 .resize(newSize.width, newSize.height)
12 .toFile(destination) 27 .toFile(destination)
13 28
diff --git a/server/lib/activitypub/videos.ts b/server/lib/activitypub/videos.ts
index 80de92f24..6ff9baefe 100644
--- a/server/lib/activitypub/videos.ts
+++ b/server/lib/activitypub/videos.ts
@@ -242,10 +242,6 @@ async function updateVideoFromAP (options: {
242 if (options.updateViews === true) options.video.set('views', videoData.views) 242 if (options.updateViews === true) options.video.set('views', videoData.views)
243 await options.video.save(sequelizeOptions) 243 await options.video.save(sequelizeOptions)
244 244
245 // Don't block on request
246 generateThumbnailFromUrl(options.video, options.videoObject.icon)
247 .catch(err => logger.warn('Cannot generate thumbnail of %s.', options.videoObject.id, { err }))
248
249 { 245 {
250 const videoFileAttributes = videoFileActivityUrlToDBAttributes(options.video, options.videoObject) 246 const videoFileAttributes = videoFileActivityUrlToDBAttributes(options.video, options.videoObject)
251 const newVideoFiles = videoFileAttributes.map(a => new VideoFileModel(a)) 247 const newVideoFiles = videoFileAttributes.map(a => new VideoFileModel(a))
@@ -293,6 +289,12 @@ async function updateVideoFromAP (options: {
293 logger.debug('Cannot update the remote video.', { err }) 289 logger.debug('Cannot update the remote video.', { err })
294 throw err 290 throw err
295 } 291 }
292
293 try {
294 await generateThumbnailFromUrl(options.video, options.videoObject.icon)
295 } catch (err) {
296 logger.warn('Cannot generate thumbnail of %s.', options.videoObject.id, { err })
297 }
296} 298}
297 299
298export { 300export {