mirror of https://github.com/Chocobozzz/PeerTube
Add ability to remove a video from a plugin
parent
1b05d82d86
commit
ab3ead3a6f
|
@ -25,7 +25,7 @@ const Hooks = {
|
||||||
},
|
},
|
||||||
|
|
||||||
runAction: <T, U extends ServerActionHookName>(hookName: U, params?: T) => {
|
runAction: <T, U extends ServerActionHookName>(hookName: U, params?: T) => {
|
||||||
PluginManager.Instance.runHook(hookName, params)
|
PluginManager.Instance.runHook(hookName, undefined, params)
|
||||||
.catch(err => logger.error('Fatal hook error.', { err }))
|
.catch(err => logger.error('Fatal hook error.', { err }))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
import { PeerTubeHelpers } from '@server/typings/plugins'
|
import { PeerTubeHelpers } from '@server/typings/plugins'
|
||||||
import { sequelizeTypescript } from '@server/initializers/database'
|
import { sequelizeTypescript } from '@server/initializers/database'
|
||||||
import { buildLogger } from '@server/helpers/logger'
|
import { buildLogger } from '@server/helpers/logger'
|
||||||
|
import { VideoModel } from '@server/models/video/video'
|
||||||
|
|
||||||
function buildPluginHelpers (npmName: string): PeerTubeHelpers {
|
function buildPluginHelpers (npmName: string): PeerTubeHelpers {
|
||||||
const logger = buildPluginLogger(npmName)
|
const logger = buildPluginLogger(npmName)
|
||||||
|
|
||||||
const database = buildDatabaseHelpers()
|
const database = buildDatabaseHelpers()
|
||||||
|
const videos = buildVideosHelpers()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
logger,
|
logger,
|
||||||
database
|
database,
|
||||||
|
videos
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,3 +31,15 @@ function buildDatabaseHelpers () {
|
||||||
query: sequelizeTypescript.query.bind(sequelizeTypescript)
|
query: sequelizeTypescript.query.bind(sequelizeTypescript)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildVideosHelpers () {
|
||||||
|
return {
|
||||||
|
removeVideo: (id: number) => {
|
||||||
|
return sequelizeTypescript.transaction(async t => {
|
||||||
|
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id, t)
|
||||||
|
|
||||||
|
await video.destroy({ transaction: t })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
async function register ({
|
async function register ({
|
||||||
peertubeHelpers
|
peertubeHelpers,
|
||||||
|
registerHook
|
||||||
}) {
|
}) {
|
||||||
peertubeHelpers.logger.info('Hello world from plugin four')
|
const logger = peertubeHelpers.logger
|
||||||
|
|
||||||
|
logger.info('Hello world from plugin four')
|
||||||
|
|
||||||
const username = 'root'
|
const username = 'root'
|
||||||
const results = await peertubeHelpers.database.query(
|
const results = await peertubeHelpers.database.query(
|
||||||
|
@ -12,7 +15,16 @@ async function register ({
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
peertubeHelpers.logger.info('root email is ' + results[0]['email'])
|
logger.info('root email is ' + results[0]['email'])
|
||||||
|
|
||||||
|
registerHook({
|
||||||
|
target: 'action:api.video.viewed',
|
||||||
|
handler: async ({ video }) => {
|
||||||
|
await peertubeHelpers.videos.removeVideo(video.id)
|
||||||
|
|
||||||
|
logger.info('Video deleted by plugin four.')
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function unregister () {
|
async function unregister () {
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
||||||
|
|
||||||
import * as chai from 'chai'
|
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import { cleanupTests, flushAndRunServer, ServerInfo, waitUntilLog } from '../../../shared/extra-utils/server/servers'
|
import { cleanupTests, flushAndRunServer, ServerInfo, waitUntilLog } from '../../../shared/extra-utils/server/servers'
|
||||||
import { getPluginTestPath, installPlugin, setAccessTokensToServers } from '../../../shared/extra-utils'
|
import {
|
||||||
|
checkVideoFilesWereRemoved,
|
||||||
const expect = chai.expect
|
getPluginTestPath,
|
||||||
|
getVideo,
|
||||||
|
installPlugin,
|
||||||
|
setAccessTokensToServers,
|
||||||
|
uploadVideoAndGetId,
|
||||||
|
viewVideo
|
||||||
|
} from '../../../shared/extra-utils'
|
||||||
|
|
||||||
describe('Test plugin helpers', function () {
|
describe('Test plugin helpers', function () {
|
||||||
let server: ServerInfo
|
let server: ServerInfo
|
||||||
|
@ -32,6 +37,29 @@ describe('Test plugin helpers', function () {
|
||||||
await waitUntilLog(server, `root email is admin${server.internalServerNumber}@example.com`, 1)
|
await waitUntilLog(server, `root email is admin${server.internalServerNumber}@example.com`, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should remove a video after a view', async function () {
|
||||||
|
this.timeout(20000)
|
||||||
|
|
||||||
|
const videoUUID = (await uploadVideoAndGetId({ server: server, videoName: 'video1' })).uuid
|
||||||
|
|
||||||
|
// Should not throw -> video exists
|
||||||
|
await getVideo(server.url, videoUUID)
|
||||||
|
// Should delete the video
|
||||||
|
await viewVideo(server.url, videoUUID)
|
||||||
|
|
||||||
|
await waitUntilLog(server, 'Video deleted by plugin four.', 1)
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Should throw because the video should have been deleted
|
||||||
|
await getVideo(server.url, videoUUID)
|
||||||
|
throw new Error('Video exists')
|
||||||
|
} catch (err) {
|
||||||
|
if (err.message.includes('exists')) throw err
|
||||||
|
}
|
||||||
|
|
||||||
|
await checkVideoFilesWereRemoved(videoUUID, server.internalServerNumber)
|
||||||
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
await cleanupTests([ server ])
|
await cleanupTests([ server ])
|
||||||
})
|
})
|
||||||
|
|
|
@ -13,6 +13,10 @@ export type PeerTubeHelpers = {
|
||||||
database: {
|
database: {
|
||||||
query: Function
|
query: Function
|
||||||
}
|
}
|
||||||
|
|
||||||
|
videos: {
|
||||||
|
removeVideo: (videoId: number) => Promise<void>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type RegisterServerOptions = {
|
export type RegisterServerOptions = {
|
||||||
|
|
Loading…
Reference in New Issue