Some plugins fixes and doc enhancements

pull/1987/head
Chocobozzz 2019-07-17 15:46:51 +02:00 committed by Chocobozzz
parent 662e5d4fe4
commit 9fa6ca160a
6 changed files with 45 additions and 19 deletions

View File

@ -125,8 +125,15 @@ export class PluginService {
for (const hook of this.hooks[hookName]) { for (const hook of this.hooks[hookName]) {
try { try {
if (wait) result = await hook.handler(param) const p = hook.handler(param)
else result = hook.handler()
if (wait) {
result = await p
} else if (p.catch) {
p.catch((err: Error) => {
console.error('Cannot run hook %s of script %s of plugin %s.', hookName, hook.plugin, hook.clientScript, err)
})
}
} catch (err) { } catch (err) {
console.error('Cannot run hook %s of script %s of plugin %s.', hookName, hook.plugin, hook.clientScript, err) console.error('Cannot run hook %s of script %s of plugin %s.', hookName, hook.plugin, hook.clientScript, err)
} }

View File

@ -19,7 +19,7 @@ const LAST_MIGRATION_VERSION = 400
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const API_VERSION = 'v1' const API_VERSION = 'v1'
const PEERTUBE_VERSION = process.env.npm_package_version || 'unknown' const PEERTUBE_VERSION = require(join(root(), 'package.json')).version
const PAGINATION = { const PAGINATION = {
COUNT: { COUNT: {

View File

@ -104,10 +104,12 @@ export class PluginManager {
for (const hook of this.hooks[hookName]) { for (const hook of this.hooks[hookName]) {
try { try {
const p = hook.handler(param)
if (wait) { if (wait) {
result = await hook.handler(param) result = await p
} else { } else if (p.catch) {
result = hook.handler() p.catch(err => logger.warn('Hook %s of plugin %s thrown an error.', hookName, hook.pluginName, { err }))
} }
} catch (err) { } catch (err) {
logger.error('Cannot run hook %s of plugin %s.', hookName, hook.pluginName, { err }) logger.error('Cannot run hook %s of plugin %s.', hookName, hook.pluginName, { err })
@ -329,7 +331,7 @@ export class PluginManager {
registerSetting, registerSetting,
settingsManager, settingsManager,
storageManager storageManager
}) }).catch(err => logger.error('Cannot register plugin %s.', npmName, { err }))
logger.info('Add plugin %s CSS to global file.', npmName) logger.info('Add plugin %s CSS to global file.', npmName)
@ -365,7 +367,7 @@ export class PluginManager {
private async regeneratePluginGlobalCSS () { private async regeneratePluginGlobalCSS () {
await this.resetCSSGlobalFile() await this.resetCSSGlobalFile()
for (const key of Object.keys(this.registeredPlugins)) { for (const key of Object.keys(this.getRegisteredPlugins())) {
const plugin = this.registeredPlugins[key] const plugin = this.registeredPlugins[key]
await this.addCSSToGlobalFile(plugin.path, plugin.css) await this.addCSSToGlobalFile(plugin.path, plugin.css)

View File

@ -156,6 +156,15 @@ export class PluginModel extends Model<PluginModel> {
return PluginModel.findOne(query) return PluginModel.findOne(query)
.then((c: any) => { .then((c: any) => {
if (!c) return undefined if (!c) return undefined
const value = c.value
if (typeof value === 'string' && value.startsWith('{')) {
try {
return JSON.parse(value)
} catch {
return value
}
}
return c.value return c.value
}) })

View File

@ -1,7 +1,7 @@
import { RegisterOptions } from './register-options.model' import { RegisterOptions } from './register-options.model'
export interface PluginLibrary { export interface PluginLibrary {
register: (options: RegisterOptions) => void register: (options: RegisterOptions) => Promise<any>
unregister: () => Promise<any> unregister: () => Promise<any>
} }

View File

@ -18,10 +18,13 @@ A plugin registers functions in JavaScript to execute when PeerTube (server and
Example: Example:
```js ```js
registerHook({ // This register function is called by PeerTube, and **must** return a promise
target: 'action:application.listening', async function register ({ registerHook }) {
handler: () => displayHelloWorld() registerHook({
}) target: 'action:application.listening',
handler: () => displayHelloWorld()
})
}
``` ```
On server side, these hooks are registered by the `library` file defined in `package.json`. On server side, these hooks are registered by the `library` file defined in `package.json`.
@ -65,9 +68,7 @@ or `/themes/{theme-name}/{theme-version}/static/` routes.
Plugins can declare CSS files that PeerTube will automatically inject in the client. Plugins can declare CSS files that PeerTube will automatically inject in the client.
### Server helpers ### Server helpers (only for plugins)
**Only for plugins**
#### Settings #### Settings
@ -94,7 +95,7 @@ Example:
```js ```js
const value = await storageManager.getData('mykey') const value = await storageManager.getData('mykey')
await storageManager.storeData('mykey', 'myvalue') await storageManager.storeData('mykey', { subkey: 'value' })
``` ```
### Publishing ### Publishing
@ -169,12 +170,13 @@ If you don't need static directories, use an empty `object`:
} }
``` ```
And if you don't need CSS files, use an empty `array`: And if you don't need CSS or client script files, use an empty `array`:
```json ```json
{ {
..., ...,
"css": [], "css": [],
"clientScripts": [],
... ...
} }
``` ```
@ -197,8 +199,14 @@ You'll need to have a local PeerTube instance:
``` ```
$ npm run build -- --light $ npm run build -- --light
``` ```
* Build the CLI:
* Run it (you can access to your instance on http://localhost:9000): ```
$ npm run setup:cli
```
* Run PeerTube (you can access to your instance on http://localhost:9000):
``` ```
$ NODE_ENV=test npm start $ NODE_ENV=test npm start