]>
Commit | Line | Data |
---|---|---|
5a921e7b | 1 | import { Job } from 'bullmq' |
30842128 | 2 | import { copy, stat } from 'fs-extra' |
d7a25329 | 3 | import { createTorrentAndSetInfoHash } from '@server/helpers/webtorrent' |
0305db28 JB |
4 | import { CONFIG } from '@server/initializers/config' |
5 | import { federateVideoIfNeeded } from '@server/lib/activitypub/videos' | |
6 | import { generateWebTorrentVideoFilename } from '@server/lib/paths' | |
bd911b54 | 7 | import { buildMoveToObjectStorageJob } from '@server/lib/video' |
0305db28 | 8 | import { VideoPathManager } from '@server/lib/video-path-manager' |
c729caf6 C |
9 | import { VideoModel } from '@server/models/video/video' |
10 | import { VideoFileModel } from '@server/models/video/video-file' | |
2451916e | 11 | import { MVideoFullLight } from '@server/types/models' |
c729caf6 | 12 | import { getLowercaseExtension } from '@shared/core-utils' |
0305db28 | 13 | import { VideoFileImportPayload, VideoStorage } from '@shared/models' |
c729caf6 | 14 | import { getVideoStreamFPS, getVideoStreamDimensionsInfo } from '../../../helpers/ffmpeg' |
daf6e480 | 15 | import { logger } from '../../../helpers/logger' |
bd911b54 | 16 | import { JobQueue } from '../job-queue' |
30842128 | 17 | |
41fb13c3 | 18 | async function processVideoFileImport (job: Job) { |
30842128 | 19 | const payload = job.data as VideoFileImportPayload |
bd911b54 | 20 | logger.info('Processing video file import in job %s.', job.id) |
30842128 | 21 | |
4fae2b1f | 22 | const video = await VideoModel.loadFull(payload.videoUUID) |
30842128 C |
23 | // No video, maybe deleted? |
24 | if (!video) { | |
25 | logger.info('Do not process job %d, video does not exist.', job.id) | |
26 | return undefined | |
27 | } | |
28 | ||
29 | await updateVideoFile(video, payload.filePath) | |
30 | ||
0305db28 | 31 | if (CONFIG.OBJECT_STORAGE.ENABLED) { |
bd911b54 | 32 | await JobQueue.Instance.createJob(await buildMoveToObjectStorageJob({ video, previousVideoState: video.state })) |
0305db28 JB |
33 | } else { |
34 | await federateVideoIfNeeded(video, false) | |
69eddafb | 35 | } |
77d7e851 | 36 | |
30842128 C |
37 | return video |
38 | } | |
39 | ||
40 | // --------------------------------------------------------------------------- | |
41 | ||
42 | export { | |
43 | processVideoFileImport | |
44 | } | |
45 | ||
46 | // --------------------------------------------------------------------------- | |
47 | ||
90a8bd30 | 48 | async function updateVideoFile (video: MVideoFullLight, inputFilePath: string) { |
c729caf6 | 49 | const { resolution } = await getVideoStreamDimensionsInfo(inputFilePath) |
30842128 | 50 | const { size } = await stat(inputFilePath) |
c729caf6 | 51 | const fps = await getVideoStreamFPS(inputFilePath) |
30842128 | 52 | |
ea54cd04 | 53 | const fileExt = getLowercaseExtension(inputFilePath) |
30842128 | 54 | |
679c12e6 | 55 | const currentVideoFile = video.VideoFiles.find(videoFile => videoFile.resolution === resolution) |
30842128 C |
56 | |
57 | if (currentVideoFile) { | |
58 | // Remove old file and old torrent | |
1bb4c9ab | 59 | await video.removeWebTorrentFile(currentVideoFile) |
30842128 C |
60 | // Remove the old video file from the array |
61 | video.VideoFiles = video.VideoFiles.filter(f => f !== currentVideoFile) | |
62 | ||
2451916e | 63 | await currentVideoFile.destroy() |
30842128 C |
64 | } |
65 | ||
2451916e | 66 | const newVideoFile = new VideoFileModel({ |
679c12e6 | 67 | resolution, |
2451916e | 68 | extname: fileExt, |
679c12e6 | 69 | filename: generateWebTorrentVideoFilename(resolution, fileExt), |
0305db28 | 70 | storage: VideoStorage.FILE_SYSTEM, |
2451916e C |
71 | size, |
72 | fps, | |
73 | videoId: video.id | |
74 | }) | |
30842128 | 75 | |
0305db28 | 76 | const outputPath = VideoPathManager.Instance.getFSVideoFileOutputPath(video, newVideoFile) |
2451916e | 77 | await copy(inputFilePath, outputPath) |
30842128 | 78 | |
2451916e | 79 | video.VideoFiles.push(newVideoFile) |
8efc27bf | 80 | await createTorrentAndSetInfoHash(video, newVideoFile) |
30842128 | 81 | |
2451916e | 82 | await newVideoFile.save() |
30842128 | 83 | } |