mirror of https://github.com/Chocobozzz/PeerTube
Fix import captions test
parent
ba6e9e8f1d
commit
652c64165b
|
@ -172,11 +172,12 @@ async function addYoutubeDLImport (req: express.Request, res: express.Response)
|
||||||
user
|
user
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
// Get video subtitles
|
// Get video subtitles
|
||||||
try {
|
try {
|
||||||
const subtitles = await getYoutubeDLSubs(targetUrl)
|
const subtitles = await getYoutubeDLSubs(targetUrl)
|
||||||
|
|
||||||
|
logger.info('Will create %s subtitles from youtube import %s.', subtitles.length, targetUrl)
|
||||||
|
|
||||||
for (const subtitle of subtitles) {
|
for (const subtitle of subtitles) {
|
||||||
const videoCaption = new VideoCaptionModel({
|
const videoCaption = new VideoCaptionModel({
|
||||||
videoId: video.id,
|
videoId: video.id,
|
||||||
|
|
|
@ -21,8 +21,8 @@ export type YoutubeDLInfo = {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type YoutubeDLSubs = {
|
export type YoutubeDLSubs = {
|
||||||
language: string,
|
language: string
|
||||||
filename: string,
|
filename: string
|
||||||
path: string
|
path: string
|
||||||
}[]
|
}[]
|
||||||
|
|
||||||
|
@ -61,15 +61,20 @@ function getYoutubeDLSubs (url: string, opts?: object): Promise<YoutubeDLSubs> {
|
||||||
youtubeDL.getSubs(url, options, (err, files) => {
|
youtubeDL.getSubs(url, options, (err, files) => {
|
||||||
if (err) return rej(err)
|
if (err) return rej(err)
|
||||||
|
|
||||||
|
logger.debug('Get subtitles from youtube dl.', { url, files })
|
||||||
|
|
||||||
const subtitles = files.reduce((acc, filename) => {
|
const subtitles = files.reduce((acc, filename) => {
|
||||||
const matched = filename.match(/\.([a-z]{2})\.(vtt|ttml)/i)
|
const matched = filename.match(/\.([a-z]{2})\.(vtt|ttml)/i)
|
||||||
|
|
||||||
if (matched[1]) {
|
if (matched[1]) {
|
||||||
return [...acc, {
|
return [
|
||||||
language: matched[1],
|
...acc,
|
||||||
path: join(cwd, filename),
|
{
|
||||||
filename
|
language: matched[1],
|
||||||
}]
|
path: join(cwd, filename),
|
||||||
|
filename
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ async function getOrCreateActorAndServerAndModel (
|
||||||
if (actor.VideoChannel) (actor as MActorAccountChannelIdActor).VideoChannel.Actor = actor
|
if (actor.VideoChannel) (actor as MActorAccountChannelIdActor).VideoChannel.Actor = actor
|
||||||
|
|
||||||
const { actor: actorRefreshed, refreshed } = await retryTransactionWrapper(refreshActorIfNeeded, actor, fetchType)
|
const { actor: actorRefreshed, refreshed } = await retryTransactionWrapper(refreshActorIfNeeded, actor, fetchType)
|
||||||
if (!actorRefreshed) throw new Error('Actor ' + actorRefreshed.url + ' does not exist anymore.')
|
if (!actorRefreshed) throw new Error('Actor ' + actor.url + ' does not exist anymore.')
|
||||||
|
|
||||||
if ((created === true || refreshed === true) && updateCollections === true) {
|
if ((created === true || refreshed === true) && updateCollections === true) {
|
||||||
const payload = { uri: actor.outboxUrl, type: 'activity' as 'activity' }
|
const payload = { uri: actor.outboxUrl, type: 'activity' as 'activity' }
|
||||||
|
|
|
@ -129,6 +129,7 @@ export class VideoImportModel extends Model<VideoImportModel> {
|
||||||
distinct: true,
|
distinct: true,
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
|
attributes: [ 'id' ],
|
||||||
model: UserModel.unscoped(), // FIXME: Without this, sequelize try to COUNT(DISTINCT(*)) which is an invalid SQL query
|
model: UserModel.unscoped(), // FIXME: Without this, sequelize try to COUNT(DISTINCT(*)) which is an invalid SQL query
|
||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,11 +62,14 @@ describe('Test video imports', function () {
|
||||||
|
|
||||||
expect(videoTorrent.name).to.contain('你好 世界 720p.mp4')
|
expect(videoTorrent.name).to.contain('你好 世界 720p.mp4')
|
||||||
expect(videoMagnet.name).to.contain('super peertube2 video')
|
expect(videoMagnet.name).to.contain('super peertube2 video')
|
||||||
|
|
||||||
|
const resCaptions = await listVideoCaptions(url, idHttp)
|
||||||
|
expect(resCaptions.body.total).to.equal(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkVideoServer2 (url: string, id: number | string) {
|
async function checkVideoServer2 (url: string, id: number | string) {
|
||||||
const res = await getVideo(url, id)
|
const res = await getVideo(url, id)
|
||||||
const video = res.body
|
const video: VideoDetails = res.body
|
||||||
|
|
||||||
expect(video.name).to.equal('my super name')
|
expect(video.name).to.equal('my super name')
|
||||||
expect(video.category.label).to.equal('Entertainment')
|
expect(video.category.label).to.equal('Entertainment')
|
||||||
|
@ -77,6 +80,9 @@ describe('Test video imports', function () {
|
||||||
expect(video.tags).to.deep.equal([ 'supertag1', 'supertag2' ])
|
expect(video.tags).to.deep.equal([ 'supertag1', 'supertag2' ])
|
||||||
|
|
||||||
expect(video.files).to.have.lengthOf(1)
|
expect(video.files).to.have.lengthOf(1)
|
||||||
|
|
||||||
|
const resCaptions = await listVideoCaptions(url, id)
|
||||||
|
expect(resCaptions.body.total).to.equal(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
before(async function () {
|
before(async function () {
|
||||||
|
@ -114,44 +120,42 @@ describe('Test video imports', function () {
|
||||||
expect(res.body.video.name).to.equal('small video - youtube')
|
expect(res.body.video.name).to.equal('small video - youtube')
|
||||||
|
|
||||||
const resCaptions = await listVideoCaptions(servers[0].url, res.body.video.id)
|
const resCaptions = await listVideoCaptions(servers[0].url, res.body.video.id)
|
||||||
const videoCaptions: VideoCaption[] = resCaptions.body
|
const videoCaptions: VideoCaption[] = resCaptions.body.data
|
||||||
expect(videoCaptions).to.have.lengthOf(2)
|
expect(videoCaptions).to.have.lengthOf(2)
|
||||||
|
|
||||||
const enCaption = videoCaptions.filter(caption => caption.language.label === 'en')[0]
|
const enCaption = videoCaptions.find(caption => caption.language.id === 'en')
|
||||||
expect(enCaption).to.not(undefined)
|
expect(enCaption).to.exist
|
||||||
expect(enCaption.language.label).to.equal('en')
|
expect(enCaption.language.label).to.equal('English')
|
||||||
expect(enCaption.captionPath).to.equal(`/static/video-captions/${res.body.video.uuid}-en.vtt`)
|
expect(enCaption.captionPath).to.equal(`/static/video-captions/${res.body.video.uuid}-en.vtt`)
|
||||||
await testCaptionFile(servers[0].url, enCaption.captionPath, `WEBVTT
|
await testCaptionFile(servers[0].url, enCaption.captionPath, `WEBVTT
|
||||||
|
Kind: captions
|
||||||
|
Language: en
|
||||||
|
|
||||||
1
|
00:00:01.600 --> 00:00:04.200
|
||||||
00:00:01.600 --> 00:00:04.200
|
English (US)
|
||||||
English (US)
|
|
||||||
|
|
||||||
2
|
00:00:05.900 --> 00:00:07.999
|
||||||
00:00:05.900 --> 00:00:07.999
|
This is a subtitle in American English
|
||||||
This is a subtitle in American English
|
|
||||||
|
|
||||||
3
|
00:00:10.000 --> 00:00:14.000
|
||||||
00:00:10.000 --> 00:00:14.000
|
Adding subtitles is very easy to do`)
|
||||||
Adding subtitles is very easy to do`)
|
|
||||||
|
|
||||||
const frCaption = videoCaptions.filter(caption => caption.language.label === 'fr')[0]
|
const frCaption = videoCaptions.find(caption => caption.language.id === 'fr')
|
||||||
expect(frCaption).to.not(undefined)
|
expect(frCaption).to.exist
|
||||||
expect(frCaption.language.label).to.equal('fr')
|
expect(frCaption.language.label).to.equal('French')
|
||||||
expect(frCaption.captionPath).to.equal(`/static/video-captions/${res.body.video.uuid}-en.vtt`)
|
expect(frCaption.captionPath).to.equal(`/static/video-captions/${res.body.video.uuid}-fr.vtt`)
|
||||||
await testCaptionFile(servers[0].url, frCaption.captionPath, `WEBVTT
|
await testCaptionFile(servers[0].url, frCaption.captionPath, `WEBVTT
|
||||||
|
Kind: captions
|
||||||
|
Language: fr
|
||||||
|
|
||||||
1
|
00:00:01.600 --> 00:00:04.200
|
||||||
00:00:01,600 --> 00:00:04.200
|
Français (FR)
|
||||||
Français (FR)
|
|
||||||
|
|
||||||
2
|
00:00:05.900 --> 00:00:07.999
|
||||||
00:00:05,900 --> 00:00:07.999
|
C'est un sous-titre français
|
||||||
C'est un sous-titre français
|
|
||||||
|
|
||||||
3
|
00:00:10.000 --> 00:00:14.000
|
||||||
00:00:10,000 --> 00:00:14.000
|
Ajouter un sous-titre est vraiment facile`)
|
||||||
Ajouter un sous-titre est vraiment facile`)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue