X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=support%2Fdoc%2Fplugins%2Fguide.md;h=36ade117bb5a9b0c444b6897735dfae57ecd0f7e;hb=302eba0d898e38dca14739486441c27c0be6c62f;hp=ea33b8d9f6907f92b20496d9538bb5fa2b2b2946;hpb=3e03b961b8ab897500dfea626f808c009f64e551;p=github%2FChocobozzz%2FPeerTube.git diff --git a/support/doc/plugins/guide.md b/support/doc/plugins/guide.md index ea33b8d9f..36ade117b 100644 --- a/support/doc/plugins/guide.md +++ b/support/doc/plugins/guide.md @@ -15,7 +15,7 @@ - [Add custom routes](#add-custom-routes) - [Add external auth methods](#add-external-auth-methods) - [Add new transcoding profiles](#add-new-transcoding-profiles) - - [Helpers](#helpers) + - [Server helpers](#server-helpers) - [Client API (themes & plugins)](#client-api-themes--plugins) - [Plugin static route](#plugin-static-route) - [Notifier](#notifier) @@ -26,6 +26,7 @@ - [Get server config](#get-server-config) - [Add custom fields to video form](#add-custom-fields-to-video-form) - [Register settings script](#register-settings-script) + - [HTML placeholder elements](#html-placeholder-elements) - [Publishing](#publishing) - [Write a plugin/theme](#write-a-plugintheme) - [Clone the quickstart repository](#clone-the-quickstart-repository) @@ -194,12 +195,30 @@ Plugins can store/load JSON data, that PeerTube will store in its database (so d Example: ```js -function register (...) { +function register ({ + storageManager +}) { const value = await storageManager.getData('mykey') await storageManager.storeData('mykey', { subkey: 'value' }) } ``` +You can also store files in the plugin data directory (`/{plugins-directory}/data/{npm-plugin-name}`). +This directory and its content won't be deleted when your plugin is uninstalled/upgraded. + +```js +function register ({ + storageManager, + peertubeHelpers +}) { + const basePath = peertubeHelpers.plugin.getDataDirectoryPath() + + fs.writeFile(path.join(basePath, 'filename.txt'), 'content of my file', function (err) { + ... + }) +} +``` + #### Update video constants You can add/delete video categories, licences or languages using the appropriate managers: @@ -225,9 +244,27 @@ function register (...) { You can create custom routes using an [express Router](https://expressjs.com/en/4x/api.html#router) for your plugin: ```js -function register (...) { +function register ({ + router +}) { const router = getRouter() router.get('/ping', (req, res) => res.json({ message: 'pong' })) + + // Users are automatically authenticated + router.get('/auth', (res, res) => { + const user = peertubeHelpers.user.getAuthUser(res) + + const isAdmin = user.role === 0 + const isModerator = user.role === 1 + const isUser = user.role === 2 + + res.json({ + username: user.username, + isAdmin, + isModerator, + isUser + }) + }) } ``` @@ -341,9 +378,16 @@ async function register ({ const streamString = streamNum ? ':' + streamNum : '' // You can also return a promise - // All these options are optional and defaults to [] + // All these options are optional return { + scaleFilter: { + // Used to define an alternative scale filter, needed by some encoders + // Default to 'scale' + name: 'scale_vaapi' + }, + // Default to [] inputOptions: [], + // Default to [] outputOptions: [ // Use a custom bitrate '-b' + streamString + ' 10K' @@ -417,7 +461,7 @@ async function register ({ During live transcode input options are applied once for each target resolution. Plugins are responsible for detecting such situation and applying input options only once if necessary. -### Helpers +#### Server helpers PeerTube provides your plugin some helpers. For example: @@ -621,6 +665,21 @@ async function register ({ registerSettingsScript }) { } ``` +#### HTML placeholder elements + +PeerTube provides some HTML id so plugins can easily insert their own element: + +```js +async function register (...) { + const elem = document.createElement('div') + elem.className = 'hello-world-h4' + elem.innerHTML = '

Hello everybody! This is an element next to the player

' + + document.getElementById('plugin-placeholder-player-next').appendChild(elem) +} +``` + +See the complete list on https://docs.joinpeertube.org/api-plugins ### Publishing @@ -721,7 +780,7 @@ If you want to translate strings of your plugin (like labels of your registered { ..., "translations": { - "fr-FR": "./languages/fr.json", + "fr": "./languages/fr.json", "pt-BR": "./languages/pt-BR.json" }, ... @@ -729,7 +788,6 @@ If you want to translate strings of your plugin (like labels of your registered ``` The key should be one of the locales defined in [i18n.ts](https://github.com/Chocobozzz/PeerTube/blob/develop/shared/models/i18n/i18n.ts). -You **must** use the complete locales (`fr-FR` instead of `fr`). Translation files are just objects, with the english sentence as the key and the translation as the value. `fr.json` could contain for example: