はじまりの大地
このコミットが含まれているのは:
@@ -0,0 +1,97 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
||||
|
||||
import { HttpStatusCode } from '@peertube/peertube-models'
|
||||
import { buildAbsoluteFixturePath } from '@peertube/peertube-node-utils'
|
||||
import { makeGetRequest, PeerTubeServer, VideoEdit } from '@peertube/peertube-server-commands'
|
||||
import { downloadFile, unzip } from '@peertube/peertube-transcription-devtools'
|
||||
import { expect } from 'chai'
|
||||
import { ensureDir, pathExists } from 'fs-extra/esm'
|
||||
import { join } from 'path'
|
||||
import { testCaptionFile } from './captions.js'
|
||||
import { FIXTURE_URLS } from './fixture-urls.js'
|
||||
|
||||
type CustomModelName = 'tiny.pt' | 'faster-whisper-tiny'
|
||||
|
||||
export async function downloadCustomModelsIfNeeded (modelName: CustomModelName) {
|
||||
if (await pathExists(getCustomModelPath(modelName))) return
|
||||
|
||||
await ensureDir(getCustomModelDirectory())
|
||||
await unzip(await downloadFile(FIXTURE_URLS.transcriptionModels, getCustomModelDirectory()))
|
||||
}
|
||||
|
||||
export function getCustomModelDirectory () {
|
||||
return buildAbsoluteFixturePath(join('transcription', 'models-v1'))
|
||||
}
|
||||
|
||||
export function getCustomModelPath (modelName: CustomModelName) {
|
||||
return join(getCustomModelDirectory(), 'models', modelName)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export async function checkAutoCaption (
|
||||
servers: PeerTubeServer[],
|
||||
uuid: string,
|
||||
captionContains = new RegExp('^WEBVTT\\n\\n00:00.\\d{3} --> 00:')
|
||||
) {
|
||||
for (const server of servers) {
|
||||
const body = await server.captions.list({ videoId: uuid })
|
||||
expect(body.total).to.equal(1)
|
||||
expect(body.data).to.have.lengthOf(1)
|
||||
|
||||
const caption = body.data[0]
|
||||
expect(caption.language.id).to.equal('en')
|
||||
expect(caption.language.label).to.equal('English')
|
||||
expect(caption.automaticallyGenerated).to.be.true
|
||||
|
||||
{
|
||||
await testCaptionFile(server.url, caption.captionPath, captionContains)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkNoCaption (servers: PeerTubeServer[], uuid: string) {
|
||||
for (const server of servers) {
|
||||
const body = await server.captions.list({ videoId: uuid })
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
}
|
||||
|
||||
export async function getCaptionContent (server: PeerTubeServer, videoId: string, language: string) {
|
||||
const { data } = await server.captions.list({ videoId })
|
||||
|
||||
const caption = data.find(c => c.language.id === language)
|
||||
|
||||
const { text } = await makeGetRequest({ url: server.url, path: caption.captionPath, expectedStatus: HttpStatusCode.OK_200 })
|
||||
|
||||
return text
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export async function checkLanguage (servers: PeerTubeServer[], uuid: string, expected: string | null) {
|
||||
for (const server of servers) {
|
||||
const video = await server.videos.get({ id: uuid })
|
||||
|
||||
if (expected) {
|
||||
expect(video.language.id).to.equal(expected)
|
||||
} else {
|
||||
expect(video.language.id).to.be.null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function uploadForTranscription (server: PeerTubeServer, body: Partial<VideoEdit> = {}) {
|
||||
const { uuid } = await server.videos.upload({
|
||||
attributes: {
|
||||
name: 'video',
|
||||
fixture: join('transcription', 'videos', 'the_last_man_on_earth.mp4'),
|
||||
language: undefined,
|
||||
|
||||
...body
|
||||
}
|
||||
})
|
||||
|
||||
return uuid
|
||||
}
|
||||
新しい課題から参照
ユーザをブロックする