diff --git a/server/lib/plugins/plugin-helpers-builder.ts b/server/lib/plugins/plugin-helpers-builder.ts index bea0f8959..78e4a28ad 100644 --- a/server/lib/plugins/plugin-helpers-builder.ts +++ b/server/lib/plugins/plugin-helpers-builder.ts @@ -1,5 +1,6 @@ import express from 'express' import { join } from 'path' +import { ffprobePromise } from '@server/helpers/ffprobe-utils' import { buildLogger } from '@server/helpers/logger' import { CONFIG } from '@server/initializers/config' import { WEBSERVER } from '@server/initializers/constants' @@ -88,6 +89,10 @@ function buildVideosHelpers () { }) }, + ffprobe: (path: string) => { + return ffprobePromise(path) + }, + getFiles: async (id: number | string) => { const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id) if (!video) return undefined diff --git a/server/tests/fixtures/peertube-plugin-test-four/main.js b/server/tests/fixtures/peertube-plugin-test-four/main.js index edbb883e2..bff42ff40 100644 --- a/server/tests/fixtures/peertube-plugin-test-four/main.js +++ b/server/tests/fixtures/peertube-plugin-test-four/main.js @@ -111,6 +111,13 @@ async function register ({ return res.json(details) }) + + router.get('/ffprobe', async (req, res) => { + const result = await peertubeHelpers.videos.ffprobe(req.query.path) + if (!result) return res.sendStatus(404) + + return res.json(result) + }) } } diff --git a/server/tests/plugins/plugin-helpers.ts b/server/tests/plugins/plugin-helpers.ts index 26f66b0b1..da84658bb 100644 --- a/server/tests/plugins/plugin-helpers.ts +++ b/server/tests/plugins/plugin-helpers.ts @@ -224,6 +224,7 @@ describe('Test plugin helpers', function () { describe('Videos', function () { let videoUUID: string + let videoPath: string before(async () => { this.timeout(240000) @@ -260,6 +261,8 @@ describe('Test plugin helpers', function () { await makeRawRequest(file.url, HttpStatusCode.OK_200) } } + + videoPath = body.webtorrent.videoFiles[0].path } // Thumbnails check @@ -278,6 +281,20 @@ describe('Test plugin helpers', function () { } }) + it('Should probe a file', async function () { + const { body } = await makeGetRequest({ + url: servers[0].url, + path: '/plugins/test-four/router/ffprobe', + query: { + path: videoPath + }, + expectedStatus: HttpStatusCode.OK_200 + }) + + expect(body.streams).to.be.an('array') + expect(body.streams).to.have.lengthOf(2) + }) + it('Should remove a video after a view', async function () { this.timeout(40000) diff --git a/server/types/plugins/register-server-option.model.ts b/server/types/plugins/register-server-option.model.ts index 473990eb6..9f472d900 100644 --- a/server/types/plugins/register-server-option.model.ts +++ b/server/types/plugins/register-server-option.model.ts @@ -37,6 +37,8 @@ export type PeerTubeHelpers = { removeVideo: (videoId: number) => Promise + ffprobe: (path: string) => Promise + getFiles: (id: number | string) => Promise<{ webtorrent: { videoFiles: {