Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Framasoft
PeerTube
PeerTube
Commits
ab3ead3a
Verified
Commit
ab3ead3a
authored
Apr 09, 2020
by
Chocobozzz
Browse files
Add ability to remove a video from a plugin
parent
1b05d82d
Pipeline
#259323
passed with stages
in 73 minutes and 13 seconds
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
server/lib/plugins/hooks.ts
View file @
ab3ead3a
...
...
@@ -25,7 +25,7 @@ const Hooks = {
},
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
}))
}
}
...
...
server/lib/plugins/plugin-helpers.ts
View file @
ab3ead3a
import
{
PeerTubeHelpers
}
from
'
@server/typings/plugins
'
import
{
sequelizeTypescript
}
from
'
@server/initializers/database
'
import
{
buildLogger
}
from
'
@server/helpers/logger
'
import
{
VideoModel
}
from
'
@server/models/video/video
'
function
buildPluginHelpers
(
npmName
:
string
):
PeerTubeHelpers
{
const
logger
=
buildPluginLogger
(
npmName
)
const
database
=
buildDatabaseHelpers
()
const
videos
=
buildVideosHelpers
()
return
{
logger
,
database
database
,
videos
}
}
...
...
@@ -28,3 +31,15 @@ function buildDatabaseHelpers () {
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
})
})
}
}
}
server/tests/fixtures/peertube-plugin-test-four/main.js
View file @
ab3ead3a
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
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
()
{
...
...
server/tests/plugins/plugin-helpers.ts
View file @
ab3ead3a
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import
*
as
chai
from
'
chai
'
import
'
mocha
'
import
{
cleanupTests
,
flushAndRunServer
,
ServerInfo
,
waitUntilLog
}
from
'
../../../shared/extra-utils/server/servers
'
import
{
getPluginTestPath
,
installPlugin
,
setAccessTokensToServers
}
from
'
../../../shared/extra-utils
'
const
expect
=
chai
.
expect
import
{
checkVideoFilesWereRemoved
,
getPluginTestPath
,
getVideo
,
installPlugin
,
setAccessTokensToServers
,
uploadVideoAndGetId
,
viewVideo
}
from
'
../../../shared/extra-utils
'
describe
(
'
Test plugin helpers
'
,
function
()
{
let
server
:
ServerInfo
...
...
@@ -32,6 +37,29 @@ describe('Test plugin helpers', function () {
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
()
{
await
cleanupTests
([
server
])
})
...
...
server/typings/plugins/register-server-option.model.ts
View file @
ab3ead3a
...
...
@@ -13,6 +13,10 @@ export type PeerTubeHelpers = {
database
:
{
query
:
Function
}
videos
:
{
removeVideo
:
(
videoId
:
number
)
=>
Promise
<
void
>
}
}
export
type
RegisterServerOptions
=
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment