aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/video/video-file.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2022-07-25 10:57:16 +0200
committerChocobozzz <me@florianbigard.com>2022-07-25 10:57:16 +0200
commit7b6b445d91d3f0bcbb526cb1e8c1f26b96f0a971 (patch)
tree1bc9724411941e0082243164d6cc53d02902b1f7 /server/models/video/video-file.ts
parent4f50475c67356fb1fecd1de6d2551fdc5ad9a739 (diff)
downloadPeerTube-7b6b445d91d3f0bcbb526cb1e8c1f26b96f0a971.tar.gz
PeerTube-7b6b445d91d3f0bcbb526cb1e8c1f26b96f0a971.tar.zst
PeerTube-7b6b445d91d3f0bcbb526cb1e8c1f26b96f0a971.zip
Regenerate video filenames on transcoding
In particular when using manual transcoding, to invalidate potential HTTP caches in front of peertube
Diffstat (limited to 'server/models/video/video-file.ts')
-rw-r--r--server/models/video/video-file.ts41
1 files changed, 36 insertions, 5 deletions
diff --git a/server/models/video/video-file.ts b/server/models/video/video-file.ts
index 4aaee1ffa..d4f07f85f 100644
--- a/server/models/video/video-file.ts
+++ b/server/models/video/video-file.ts
@@ -405,15 +405,16 @@ export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel>
405 mode: 'streaming-playlist' | 'video', 405 mode: 'streaming-playlist' | 'video',
406 transaction: Transaction 406 transaction: Transaction
407 ) { 407 ) {
408 const baseWhere = { 408 const baseFind = {
409 fps: videoFile.fps, 409 fps: videoFile.fps,
410 resolution: videoFile.resolution 410 resolution: videoFile.resolution,
411 transaction
411 } 412 }
412 413
413 if (mode === 'streaming-playlist') Object.assign(baseWhere, { videoStreamingPlaylistId: videoFile.videoStreamingPlaylistId }) 414 const element = mode === 'streaming-playlist'
414 else Object.assign(baseWhere, { videoId: videoFile.videoId }) 415 ? await VideoFileModel.loadHLSFile({ ...baseFind, playlistId: videoFile.videoStreamingPlaylistId })
416 : await VideoFileModel.loadWebTorrentFile({ ...baseFind, videoId: videoFile.videoId })
415 417
416 const element = await VideoFileModel.findOne({ where: baseWhere, transaction })
417 if (!element) return videoFile.save({ transaction }) 418 if (!element) return videoFile.save({ transaction })
418 419
419 for (const k of Object.keys(videoFile.toJSON())) { 420 for (const k of Object.keys(videoFile.toJSON())) {
@@ -423,6 +424,36 @@ export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel>
423 return element.save({ transaction }) 424 return element.save({ transaction })
424 } 425 }
425 426
427 static async loadWebTorrentFile (options: {
428 videoId: number
429 fps: number
430 resolution: number
431 transaction?: Transaction
432 }) {
433 const where = {
434 fps: options.fps,
435 resolution: options.resolution,
436 videoId: options.videoId
437 }
438
439 return VideoFileModel.findOne({ where, transaction: options.transaction })
440 }
441
442 static async loadHLSFile (options: {
443 playlistId: number
444 fps: number
445 resolution: number
446 transaction?: Transaction
447 }) {
448 const where = {
449 fps: options.fps,
450 resolution: options.resolution,
451 videoStreamingPlaylistId: options.playlistId
452 }
453
454 return VideoFileModel.findOne({ where, transaction: options.transaction })
455 }
456
426 static removeHLSFilesOfVideoId (videoStreamingPlaylistId: number) { 457 static removeHLSFilesOfVideoId (videoStreamingPlaylistId: number) {
427 const options = { 458 const options = {
428 where: { videoStreamingPlaylistId } 459 where: { videoStreamingPlaylistId }