X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fthumbnail.ts;h=cfee69cfc50df4ad6ef9733357c26f619a87662d;hb=35f676e5d3e5e242e84ed63da2cc78117079c7cb;hp=e37aefc85f2b7e44096c6a49b741bb57ed927ba3;hpb=b3d5cb92b100406df98e5cd1f54eff9cd2078b1c;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/thumbnail.ts b/server/lib/thumbnail.ts index e37aefc85..cfee69cfc 100644 --- a/server/lib/thumbnail.ts +++ b/server/lib/thumbnail.ts @@ -2,17 +2,17 @@ import { join } from 'path' import { ThumbnailType } from '../../shared/models/videos/thumbnail.type' import { generateImageFromVideoFile } from '../helpers/ffmpeg-utils' -import { processImage } from '../helpers/image-utils' +import { generateImageFilename, processImage } from '../helpers/image-utils' import { downloadImage } from '../helpers/requests' import { CONFIG } from '../initializers/config' import { ASSETS_PATH, PREVIEWS_SIZE, THUMBNAILS_SIZE } from '../initializers/constants' import { ThumbnailModel } from '../models/video/thumbnail' -import { MVideoFile, MVideoThumbnail } from '../types/models' +import { MVideoFile, MVideoThumbnail, MVideoUUID } from '../types/models' import { MThumbnail } from '../types/models/video/thumbnail' import { MVideoPlaylistThumbnail } from '../types/models/video/video-playlist' import { getVideoFilePath } from './video-paths' -type ImageSize = { height: number, width: number } +type ImageSize = { height?: number, width?: number } function createPlaylistMiniatureFromExisting (options: { inputPath: string @@ -69,13 +69,7 @@ function createVideoMiniatureFromUrl (options: { ? null : downloadUrl - // If the thumbnail URL did not change - const existingUrl = existingThumbnail - ? existingThumbnail.fileUrl - : null - - // If the thumbnail URL did not change and has a unique filename (introduced in 3.2), avoid thumbnail processing - const thumbnailUrlChanged = !existingUrl || existingUrl !== downloadUrl || downloadUrl.endsWith(`${video.uuid}.jpg`) + const thumbnailUrlChanged = hasThumbnailUrlChanged(existingThumbnail, downloadUrl, video) // Do not change the thumbnail filename if the file did not change const filename = thumbnailUrlChanged @@ -147,10 +141,17 @@ function createPlaceholderThumbnail (options: { size: ImageSize }) { const { fileUrl, video, type, size } = options - const { filename, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size) + const { filename: updatedFilename, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size) + + const thumbnailUrlChanged = hasThumbnailUrlChanged(existingThumbnail, fileUrl, video) const thumbnail = existingThumbnail || new ThumbnailModel() + // Do not change the thumbnail filename if the file did not change + const filename = thumbnailUrlChanged + ? updatedFilename + : existingThumbnail.filename + thumbnail.filename = filename thumbnail.height = height thumbnail.width = width @@ -171,6 +172,15 @@ export { createPlaylistMiniatureFromExisting } +function hasThumbnailUrlChanged (existingThumbnail: MThumbnail, downloadUrl: string, video: MVideoUUID) { + const existingUrl = existingThumbnail + ? existingThumbnail.fileUrl + : null + + // If the thumbnail URL did not change and has a unique filename (introduced in 3.1), avoid thumbnail processing + return !existingUrl || existingUrl !== downloadUrl || downloadUrl.endsWith(`${video.uuid}.jpg`) +} + function buildMetadataFromPlaylist (playlist: MVideoPlaylistThumbnail, size: ImageSize) { const filename = playlist.generateThumbnailName() const basePath = CONFIG.STORAGE.THUMBNAILS_DIR @@ -191,7 +201,7 @@ function buildMetadataFromVideo (video: MVideoThumbnail, type: ThumbnailType, si : undefined if (type === ThumbnailType.MINIATURE) { - const filename = video.generateThumbnailName() + const filename = generateImageFilename() const basePath = CONFIG.STORAGE.THUMBNAILS_DIR return { @@ -205,7 +215,7 @@ function buildMetadataFromVideo (video: MVideoThumbnail, type: ThumbnailType, si } if (type === ThumbnailType.PREVIEW) { - const filename = video.generatePreviewName() + const filename = generateImageFilename() const basePath = CONFIG.STORAGE.PREVIEWS_DIR return {