X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fthumbnail.ts;h=84791955e0cc00c908b9882dae22377b93dd9188;hb=00aab0666c6f772548c160fdfa871a8843b88f37;hp=344c28566798ed48a080a72f675871311fab4a82;hpb=e8bafea35bc930cb8ac5b2d521a188642a1adffe;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/thumbnail.ts b/server/lib/thumbnail.ts index 344c28566..84791955e 100644 --- a/server/lib/thumbnail.ts +++ b/server/lib/thumbnail.ts @@ -1,57 +1,71 @@ -import { VideoFileModel } from '../models/video/video-file' import { generateImageFromVideoFile } from '../helpers/ffmpeg-utils' import { CONFIG } from '../initializers/config' -import { PREVIEWS_SIZE, THUMBNAILS_SIZE } from '../initializers/constants' -import { VideoModel } from '../models/video/video' +import { ASSETS_PATH, PREVIEWS_SIZE, THUMBNAILS_SIZE } from '../initializers/constants' import { ThumbnailModel } from '../models/video/thumbnail' import { ThumbnailType } from '../../shared/models/videos/thumbnail.type' import { processImage } from '../helpers/image-utils' import { join } from 'path' import { downloadImage } from '../helpers/requests' -import { VideoPlaylistModel } from '../models/video/video-playlist' +import { MVideoPlaylistThumbnail } from '../typings/models/video/video-playlist' +import { MVideoFile, MVideoThumbnail } from '../typings/models' +import { MThumbnail } from '../typings/models/video/thumbnail' type ImageSize = { height: number, width: number } -function createPlaylistThumbnailFromExisting (inputPath: string, playlist: VideoPlaylistModel, keepOriginal = false, size?: ImageSize) { +function createPlaylistMiniatureFromExisting ( + inputPath: string, + playlist: MVideoPlaylistThumbnail, + automaticallyGenerated: boolean, + keepOriginal = false, + size?: ImageSize +) { const { filename, outputPath, height, width, existingThumbnail } = buildMetadataFromPlaylist(playlist, size) - const type = ThumbnailType.THUMBNAIL + const type = ThumbnailType.MINIATURE - const thumbnailCreator = () => processImage({ path: inputPath }, outputPath, { width, height }, keepOriginal) - return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail }) + const thumbnailCreator = () => processImage(inputPath, outputPath, { width, height }, keepOriginal) + return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, automaticallyGenerated, existingThumbnail }) } -function createPlaylistThumbnailFromUrl (url: string, playlist: VideoPlaylistModel, size?: ImageSize) { +function createPlaylistMiniatureFromUrl (fileUrl: string, playlist: MVideoPlaylistThumbnail, size?: ImageSize) { const { filename, basePath, height, width, existingThumbnail } = buildMetadataFromPlaylist(playlist, size) - const type = ThumbnailType.THUMBNAIL + const type = ThumbnailType.MINIATURE - const thumbnailCreator = () => downloadImage(url, basePath, filename, { width, height }) - return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail, url }) + const thumbnailCreator = () => downloadImage(fileUrl, basePath, filename, { width, height }) + return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail, fileUrl }) } -function createVideoThumbnailFromUrl (url: string, video: VideoModel, type: ThumbnailType, size?: ImageSize) { +function createVideoMiniatureFromUrl (fileUrl: string, video: MVideoThumbnail, type: ThumbnailType, size?: ImageSize) { const { filename, basePath, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size) - const thumbnailCreator = () => downloadImage(url, basePath, filename, { width, height }) + const thumbnailCreator = () => downloadImage(fileUrl, basePath, filename, { width, height }) - return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail, url }) + return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail, fileUrl }) } -function createVideoThumbnailFromExisting (inputPath: string, video: VideoModel, type: ThumbnailType, size?: ImageSize) { +function createVideoMiniatureFromExisting ( + inputPath: string, + video: MVideoThumbnail, + type: ThumbnailType, + automaticallyGenerated: boolean, + size?: ImageSize +) { const { filename, outputPath, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size) - const thumbnailCreator = () => processImage({ path: inputPath }, outputPath, { width, height }) + const thumbnailCreator = () => processImage(inputPath, outputPath, { width, height }) - return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail }) + return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, automaticallyGenerated, existingThumbnail }) } -function generateVideoThumbnail (video: VideoModel, videoFile: VideoFileModel, type: ThumbnailType) { +function generateVideoMiniature (video: MVideoThumbnail, videoFile: MVideoFile, type: ThumbnailType) { const input = video.getVideoFilePath(videoFile) - const { filename, basePath, height, width, existingThumbnail } = buildMetadataFromVideo(video, type) - const thumbnailCreator = () => generateImageFromVideoFile(input, basePath, filename, { height, width }) + const { filename, basePath, height, width, existingThumbnail, outputPath } = buildMetadataFromVideo(video, type) + const thumbnailCreator = videoFile.isAudio() + ? () => processImage(ASSETS_PATH.DEFAULT_AUDIO_BACKGROUND, outputPath, { width, height }, true) + : () => generateImageFromVideoFile(input, basePath, filename, { height, width }) - return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail }) + return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, automaticallyGenerated: true, existingThumbnail }) } -function createPlaceholderThumbnail (url: string, video: VideoModel, type: ThumbnailType, size: ImageSize) { +function createPlaceholderThumbnail (fileUrl: string, video: MVideoThumbnail, type: ThumbnailType, size: ImageSize) { const { filename, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size) const thumbnail = existingThumbnail ? existingThumbnail : new ThumbnailModel() @@ -60,7 +74,7 @@ function createPlaceholderThumbnail (url: string, video: VideoModel, type: Thumb thumbnail.height = height thumbnail.width = width thumbnail.type = type - thumbnail.url = url + thumbnail.fileUrl = fileUrl return thumbnail } @@ -68,15 +82,15 @@ function createPlaceholderThumbnail (url: string, video: VideoModel, type: Thumb // --------------------------------------------------------------------------- export { - generateVideoThumbnail, - createVideoThumbnailFromUrl, - createVideoThumbnailFromExisting, + generateVideoMiniature, + createVideoMiniatureFromUrl, + createVideoMiniatureFromExisting, createPlaceholderThumbnail, - createPlaylistThumbnailFromUrl, - createPlaylistThumbnailFromExisting + createPlaylistMiniatureFromUrl, + createPlaylistMiniatureFromExisting } -function buildMetadataFromPlaylist (playlist: VideoPlaylistModel, size: ImageSize) { +function buildMetadataFromPlaylist (playlist: MVideoPlaylistThumbnail, size: ImageSize) { const filename = playlist.generateThumbnailName() const basePath = CONFIG.STORAGE.THUMBNAILS_DIR @@ -90,12 +104,12 @@ function buildMetadataFromPlaylist (playlist: VideoPlaylistModel, size: ImageSiz } } -function buildMetadataFromVideo (video: VideoModel, type: ThumbnailType, size?: ImageSize) { +function buildMetadataFromVideo (video: MVideoThumbnail, type: ThumbnailType, size?: ImageSize) { const existingThumbnail = Array.isArray(video.Thumbnails) ? video.Thumbnails.find(t => t.type === type) : undefined - if (type === ThumbnailType.THUMBNAIL) { + if (type === ThumbnailType.MINIATURE) { const filename = video.generateThumbnailName() const basePath = CONFIG.STORAGE.THUMBNAILS_DIR @@ -132,10 +146,11 @@ async function createThumbnailFromFunction (parameters: { height: number, width: number, type: ThumbnailType, - url?: string, - existingThumbnail?: ThumbnailModel + automaticallyGenerated?: boolean, + fileUrl?: string, + existingThumbnail?: MThumbnail }) { - const { thumbnailCreator, filename, width, height, type, existingThumbnail, url = null } = parameters + const { thumbnailCreator, filename, width, height, type, existingThumbnail, automaticallyGenerated = null, fileUrl = null } = parameters const thumbnail = existingThumbnail ? existingThumbnail : new ThumbnailModel() @@ -143,7 +158,8 @@ async function createThumbnailFromFunction (parameters: { thumbnail.height = height thumbnail.width = width thumbnail.type = type - thumbnail.url = url + thumbnail.fileUrl = fileUrl + thumbnail.automaticallyGenerated = automaticallyGenerated await thumbnailCreator()