diff options
Diffstat (limited to 'server/models/video/video-file.ts')
-rw-r--r-- | server/models/video/video-file.ts | 41 |
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 } |