Add doc for custom video fields

pull/3105/head
Chocobozzz 2020-08-21 16:00:48 +02:00
parent 781ba98126
commit e08a26e23d
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
1 changed files with 62 additions and 0 deletions

View File

@ -379,6 +379,68 @@ peertubeHelpers.getSettings()
})
```
### Add custom fields to video form
To add custom fields in the video form (in *Plugin settings* tab):
```
async function register ({ registerVideoField, peertubeHelpers }) {
const descriptionHTML = await peertubeHelpers.translate(descriptionSource)
const commonOptions = {
name: 'my-field-name,
label: 'My added field',
descriptionHTML: 'Optional description',
type: 'input-textarea',
default: ''
}
for (const type of [ 'upload', 'import-url', 'import-torrent', 'update' ]) {
registerVideoField(commonOptions, { type })
}
}
```
PeerTube will send this field value in `body.pluginData['my-field-name']` and fetch it from `video.pluginData['my-field-name']`.
So for example, if you want to store an additional metadata for videos, register the following hooks in **server**:
```
async function register ({
registerHook,
storageManager
}) {
const fieldName = 'my-field-name'
// Store data associated to this video
registerHook({
target: 'action:api.video.updated',
handler: ({ video, body }) => {
if (!body.pluginData) return
const value = body.pluginData[fieldName]
if (!value) return
storageManager.storeData(fieldName + '-' + video.id, value)
}
})
// Add your custom value to the video, so the client autofill your field using the previously stored value
registerHook({
target: 'filter:api.video.get.result',
handler: async (video) => {
if (!video) return video
if (!video.pluginData) video.pluginData = {}
const result = await storageManager.getData(fieldName + '-' + video.id)
video.pluginData[fieldName] = result
return video
}
})
}
```
### Publishing