mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-04 10:19:35 +02:00
Remove previous thumbnail if needed
This commit is contained in:
parent
6302d599cd
commit
a35a22797c
15 changed files with 274 additions and 119 deletions
|
@ -1,33 +1,48 @@
|
|||
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 { 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 { ThumbnailType } from '../../shared/models/videos/thumbnail.type'
|
||||
import { processImage } from '../helpers/image-utils'
|
||||
import { join } from 'path'
|
||||
import { downloadImage } from '../helpers/requests'
|
||||
import { MVideoPlaylistThumbnail } from '../types/models/video/video-playlist'
|
||||
import { MVideoFile, MVideoThumbnail } 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 }
|
||||
|
||||
function createPlaylistMiniatureFromExisting (
|
||||
inputPath: string,
|
||||
playlist: MVideoPlaylistThumbnail,
|
||||
automaticallyGenerated: boolean,
|
||||
keepOriginal = false,
|
||||
function createPlaylistMiniatureFromExisting (options: {
|
||||
inputPath: string
|
||||
playlist: MVideoPlaylistThumbnail
|
||||
automaticallyGenerated: boolean
|
||||
keepOriginal?: boolean // default to false
|
||||
size?: ImageSize
|
||||
) {
|
||||
}) {
|
||||
const { inputPath, playlist, automaticallyGenerated, keepOriginal = false, size } = options
|
||||
const { filename, outputPath, height, width, existingThumbnail } = buildMetadataFromPlaylist(playlist, size)
|
||||
const type = ThumbnailType.MINIATURE
|
||||
|
||||
const thumbnailCreator = () => processImage(inputPath, outputPath, { width, height }, keepOriginal)
|
||||
return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, automaticallyGenerated, existingThumbnail })
|
||||
return createThumbnailFromFunction({
|
||||
thumbnailCreator,
|
||||
filename,
|
||||
height,
|
||||
width,
|
||||
type,
|
||||
automaticallyGenerated,
|
||||
existingThumbnail
|
||||
})
|
||||
}
|
||||
|
||||
function createPlaylistMiniatureFromUrl (downloadUrl: string, playlist: MVideoPlaylistThumbnail, size?: ImageSize) {
|
||||
function createPlaylistMiniatureFromUrl (options: {
|
||||
downloadUrl: string
|
||||
playlist: MVideoPlaylistThumbnail
|
||||
size?: ImageSize
|
||||
}) {
|
||||
const { downloadUrl, playlist, size } = options
|
||||
const { filename, basePath, height, width, existingThumbnail } = buildMetadataFromPlaylist(playlist, size)
|
||||
const type = ThumbnailType.MINIATURE
|
||||
|
||||
|
@ -40,7 +55,13 @@ function createPlaylistMiniatureFromUrl (downloadUrl: string, playlist: MVideoPl
|
|||
return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, existingThumbnail, fileUrl })
|
||||
}
|
||||
|
||||
function createVideoMiniatureFromUrl (downloadUrl: string, video: MVideoThumbnail, type: ThumbnailType, size?: ImageSize) {
|
||||
function createVideoMiniatureFromUrl (options: {
|
||||
downloadUrl: string
|
||||
video: MVideoThumbnail
|
||||
type: ThumbnailType
|
||||
size?: ImageSize
|
||||
}) {
|
||||
const { downloadUrl, video, type, size } = options
|
||||
const { filename, basePath, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size)
|
||||
|
||||
// Only save the file URL if it is a remote video
|
||||
|
@ -58,17 +79,31 @@ function createVideoMiniatureFromExisting (options: {
|
|||
type: ThumbnailType
|
||||
automaticallyGenerated: boolean
|
||||
size?: ImageSize
|
||||
keepOriginal?: boolean
|
||||
keepOriginal?: boolean // default to false
|
||||
}) {
|
||||
const { inputPath, video, type, automaticallyGenerated, size, keepOriginal } = options
|
||||
const { inputPath, video, type, automaticallyGenerated, size, keepOriginal = false } = options
|
||||
|
||||
const { filename, outputPath, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size)
|
||||
const thumbnailCreator = () => processImage(inputPath, outputPath, { width, height }, keepOriginal)
|
||||
|
||||
return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, automaticallyGenerated, existingThumbnail })
|
||||
return createThumbnailFromFunction({
|
||||
thumbnailCreator,
|
||||
filename,
|
||||
height,
|
||||
width,
|
||||
type,
|
||||
automaticallyGenerated,
|
||||
existingThumbnail
|
||||
})
|
||||
}
|
||||
|
||||
function generateVideoMiniature (video: MVideoThumbnail, videoFile: MVideoFile, type: ThumbnailType) {
|
||||
function generateVideoMiniature (options: {
|
||||
video: MVideoThumbnail
|
||||
videoFile: MVideoFile
|
||||
type: ThumbnailType
|
||||
}) {
|
||||
const { video, videoFile, type } = options
|
||||
|
||||
const input = getVideoFilePath(video, videoFile)
|
||||
|
||||
const { filename, basePath, height, width, existingThumbnail, outputPath } = buildMetadataFromVideo(video, type)
|
||||
|
@ -76,10 +111,24 @@ function generateVideoMiniature (video: MVideoThumbnail, videoFile: MVideoFile,
|
|||
? () => processImage(ASSETS_PATH.DEFAULT_AUDIO_BACKGROUND, outputPath, { width, height }, true)
|
||||
: () => generateImageFromVideoFile(input, basePath, filename, { height, width })
|
||||
|
||||
return createThumbnailFromFunction({ thumbnailCreator, filename, height, width, type, automaticallyGenerated: true, existingThumbnail })
|
||||
return createThumbnailFromFunction({
|
||||
thumbnailCreator,
|
||||
filename,
|
||||
height,
|
||||
width,
|
||||
type,
|
||||
automaticallyGenerated: true,
|
||||
existingThumbnail
|
||||
})
|
||||
}
|
||||
|
||||
function createPlaceholderThumbnail (fileUrl: string, video: MVideoThumbnail, type: ThumbnailType, size: ImageSize) {
|
||||
function createPlaceholderThumbnail (options: {
|
||||
fileUrl: string
|
||||
video: MVideoThumbnail
|
||||
type: ThumbnailType
|
||||
size: ImageSize
|
||||
}) {
|
||||
const { fileUrl, video, type, size } = options
|
||||
const { filename, height, width, existingThumbnail } = buildMetadataFromVideo(video, type, size)
|
||||
|
||||
const thumbnail = existingThumbnail || new ThumbnailModel()
|
||||
|
@ -164,12 +213,22 @@ async function createThumbnailFromFunction (parameters: {
|
|||
fileUrl?: string
|
||||
existingThumbnail?: MThumbnail
|
||||
}) {
|
||||
const { thumbnailCreator, filename, width, height, type, existingThumbnail, automaticallyGenerated = null, fileUrl = null } = parameters
|
||||
const {
|
||||
thumbnailCreator,
|
||||
filename,
|
||||
width,
|
||||
height,
|
||||
type,
|
||||
existingThumbnail,
|
||||
automaticallyGenerated = null,
|
||||
fileUrl = null
|
||||
} = parameters
|
||||
|
||||
// Remove old file
|
||||
if (existingThumbnail) await existingThumbnail.removeThumbnail()
|
||||
const oldFilename = existingThumbnail
|
||||
? existingThumbnail.filename
|
||||
: undefined
|
||||
|
||||
const thumbnail = existingThumbnail || new ThumbnailModel()
|
||||
const thumbnail: MThumbnail = existingThumbnail || new ThumbnailModel()
|
||||
|
||||
thumbnail.filename = filename
|
||||
thumbnail.height = height
|
||||
|
@ -177,6 +236,7 @@ async function createThumbnailFromFunction (parameters: {
|
|||
thumbnail.type = type
|
||||
thumbnail.fileUrl = fileUrl
|
||||
thumbnail.automaticallyGenerated = automaticallyGenerated
|
||||
thumbnail.previousThumbnailFilename = oldFilename
|
||||
|
||||
await thumbnailCreator()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue