Use preview instead of thumbnail for oembed
authorChocobozzz <florian.bigard@gmail.com>
Tue, 17 Oct 2017 08:35:27 +0000 (10:35 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Tue, 17 Oct 2017 08:35:27 +0000 (10:35 +0200)
server/controllers/services.ts
server/helpers/ffmpeg-utils.ts
server/initializers/constants.ts
server/models/video/video.ts
server/tests/api/services.ts

index 3ce6bd5269f65259434843ac8aac43b55c98ff47..4bbe56a8a6b1c16e47dbba265037da46cec87483 100644 (file)
@@ -1,6 +1,6 @@
 import * as express from 'express'
 
-import { CONFIG, THUMBNAILS_SIZE } from '../initializers'
+import { CONFIG, PREVIEWS_SIZE, EMBED_SIZE } from '../initializers'
 import { oembedValidator } from '../middlewares'
 import { VideoInstance } from '../models'
 
@@ -23,17 +23,17 @@ function generateOEmbed (req: express.Request, res: express.Response, next: expr
   const maxWidth = parseInt(req.query.maxwidth, 10)
 
   const embedUrl = webserverUrl + video.getEmbedPath()
-  let thumbnailUrl = webserverUrl + video.getThumbnailPath()
-  let embedWidth = 560
-  let embedHeight = 315
+  let thumbnailUrl = webserverUrl + video.getPreviewPath()
+  let embedWidth = EMBED_SIZE.width
+  let embedHeight = EMBED_SIZE.height
 
   if (maxHeight < embedHeight) embedHeight = maxHeight
   if (maxWidth < embedWidth) embedWidth = maxWidth
 
   // Our thumbnail is too big for the consumer
   if (
-    (maxHeight !== undefined && maxHeight < THUMBNAILS_SIZE.height) ||
-    (maxWidth !== undefined && maxWidth < THUMBNAILS_SIZE.width)
+    (maxHeight !== undefined && maxHeight < PREVIEWS_SIZE.height) ||
+    (maxWidth !== undefined && maxWidth < PREVIEWS_SIZE.width)
   ) {
     thumbnailUrl = undefined
   }
@@ -54,8 +54,8 @@ function generateOEmbed (req: express.Request, res: express.Response, next: expr
 
   if (thumbnailUrl !== undefined) {
     json.thumbnail_url = thumbnailUrl
-    json.thumbnail_width = THUMBNAILS_SIZE.width
-    json.thumbnail_height = THUMBNAILS_SIZE.height
+    json.thumbnail_width = PREVIEWS_SIZE.width
+    json.thumbnail_height = PREVIEWS_SIZE.height
   }
 
   return res.json(json)
index c35125ec1cedc1a784c6f7ed84c1c1c3391d0ad7..913a909058e334490678ffb17a43029916272597 100644 (file)
@@ -25,7 +25,7 @@ function getDurationFromVideoFile (path: string) {
   })
 }
 
-function generateImageFromVideoFile (fromPath: string, folder: string, imageName: string, size?: string) {
+function generateImageFromVideoFile (fromPath: string, folder: string, imageName: string, size: string) {
   const options = {
     filename: imageName,
     count: 1,
index 6218644cfbaa83ab9fff024b6f4c27d3d60be20e..491fb78f96c26367955b9d819c4ba2c030db9bdf 100644 (file)
@@ -300,8 +300,13 @@ const THUMBNAILS_SIZE = {
   height: 110
 }
 const PREVIEWS_SIZE = {
-  width: 640,
-  height: 480
+  width: 560,
+  height: 315
+}
+
+const EMBED_SIZE = {
+  width: 560,
+  height: 315
 }
 
 // Sub folders of cache directory
@@ -343,6 +348,7 @@ export {
   CACHE,
   CONFIG,
   CONSTRAINTS_FIELDS,
+  EMBED_SIZE,
   FRIEND_SCORE,
   JOB_STATES,
   JOBS_CONCURRENCY,
index 0d0048b4a6220bc8a13a2d35cc12a8fea0e38433..fb18a485a4ed0bc1a5359761f434436469a6009e 100644 (file)
@@ -48,6 +48,7 @@ import {
 
   VideoMethods
 } from './video-interface'
+import { PREVIEWS_SIZE } from '../../initializers/constants'
 
 let Video: Sequelize.Model<VideoInstance, VideoAttributes>
 let getOriginalFile: VideoMethods.GetOriginalFile
@@ -373,10 +374,13 @@ isOwned = function (this: VideoInstance) {
 }
 
 createPreview = function (this: VideoInstance, videoFile: VideoFileInstance) {
+  const imageSize = PREVIEWS_SIZE.width + 'x' + PREVIEWS_SIZE.height
+
   return generateImageFromVideoFile(
     this.getVideoFilePath(videoFile),
     CONFIG.STORAGE.PREVIEWS_DIR,
-    this.getPreviewName()
+    this.getPreviewName(),
+    imageSize
   )
 }
 
index b396ea582ffa66b90c0ddbaa49d130860513552a..76911fdc52b081173108c866340b957f829b386a 100644 (file)
@@ -42,16 +42,16 @@ describe('Test services', function () {
     const res = await getOEmbed(server.url, oembedUrl)
     const expectedHtml = `<iframe width="560" height="315" src="http://localhost:9001/videos/embed/${server.video.uuid}" ` +
                          'frameborder="0" allowfullscreen></iframe>'
-    const expectedThumbnailUrl = 'http://localhost:9001/static/thumbnails/' + server.video.uuid + '.jpg'
+    const expectedThumbnailUrl = 'http://localhost:9001/static/previews/' + server.video.uuid + '.jpg'
 
     expect(res.body.html).to.equal(expectedHtml)
     expect(res.body.title).to.equal(server.video.name)
     expect(res.body.author_name).to.equal(server.video.author)
-    expect(res.body.height).to.equal(315)
     expect(res.body.width).to.equal(560)
+    expect(res.body.height).to.equal(315)
     expect(res.body.thumbnail_url).to.equal(expectedThumbnailUrl)
-    expect(res.body.thumbnail_width).to.equal(200)
-    expect(res.body.thumbnail_height).to.equal(110)
+    expect(res.body.thumbnail_width).to.equal(560)
+    expect(res.body.thumbnail_height).to.equal(315)
   })
 
   it('Should have a valid oEmbed response with small max height query', async function () {