import { readFile } from 'fs-extra'
import { getFileSize } from '@shared/extra-utils'
import { CONSTRAINTS_FIELDS, MIMETYPES, VIDEO_LANGUAGES } from '../../initializers/constants'
+import { logger } from '../logger'
import { exists, isFileValid } from './misc'
function isVideoCaptionLanguageValid (value: any) {
async function isVTTFileValid (filePath: string) {
const size = await getFileSize(filePath)
+ const content = await readFile(filePath, 'utf8')
- if (size > CONSTRAINTS_FIELDS.VIDEO_CAPTIONS.CAPTION_FILE.FILE_SIZE.max) return false
+ logger.debug('Checking VTT file %s', filePath, { size, content })
- const content = await readFile(filePath, 'utf8')
+ if (size > CONSTRAINTS_FIELDS.VIDEO_CAPTIONS.CAPTION_FILE.FILE_SIZE.max) return false
- return content?.startsWith('WEBVTT\n')
+ return content?.startsWith('WEBVTT')
}
// ---------------------------------------------------------------------------
try {
return await updateVideoMiniatureFromUrl({ downloadUrl, video, type })
} catch (err) {
- logger.warn('Cannot process thumbnail %s from youtubedl.', downloadUrl, { err })
+ logger.warn('Cannot process thumbnail %s from youtube-dl.', downloadUrl, { err })
}
}
return null
try {
const subtitles = await youtubeDL.getSubtitles()
- logger.info('Will create %s subtitles from youtube import %s.', subtitles.length, targetUrl)
+ logger.info('Found %s subtitles candidates from youtube-dl import %s.', subtitles.length, targetUrl)
for (const subtitle of subtitles) {
if (!await isVTTFileValid(subtitle.path)) {
+ logger.info('%s is not a valid youtube-dl subtitle, skipping', subtitle.path)
await remove(subtitle.path)
continue
}
await sequelizeTypescript.transaction(async t => {
await VideoCaptionModel.insertOrReplaceLanguage(videoCaption, t)
})
+
+ logger.info('Added %s youtube-dl subtitle', subtitle.path)
}
} catch (err) {
logger.warn('Cannot get video subtitles.', { err })
const video = await server.videos.get({ id: videoUUID })
expect(video.name).to.equal('E2E tests')
+
+ const { data: captions } = await server.captions.list({ videoId: videoUUID })
+ expect(captions).to.have.lengthOf(1)
+ expect(captions[0].language.id).to.equal('fr')
+
+ const str = `WEBVTT FILE\r?\n\r?\n` +
+ `1\r?\n` +
+ `00:00:04.000 --> 00:00:09.000\r?\n` +
+ `January 1, 1994. The North American`
+ await testCaptionFile(server.url, captions[0].captionPath, new RegExp(str))
}
}
})