import './embed.scss'
import videojs from 'video.js'
import { peertubeTranslate } from '../../../../shared/core-utils/i18n'
-import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
import {
- ClientHookName,
HTMLServerConfig,
- PluginType,
+ HttpStatusCode,
+ OAuth2ErrorCode,
ResultList,
UserRefreshToken,
VideoCaption,
import { VideoJSCaption } from '../../assets/player/peertube-videojs-typings'
import { TranslationsManager } from '../../assets/player/translations-manager'
import { peertubeLocalStorage } from '../../root-helpers/peertube-web-storage'
-import { Hooks, loadPlugin, runHook } from '../../root-helpers/plugins'
+import { PluginsManager } from '../../root-helpers/plugins-manager'
import { Tokens } from '../../root-helpers/users'
import { objectToUrlEncoded } from '../../root-helpers/utils'
import { RegisterClientHelpers } from '../../types/register-client-option.model'
private wrapperElement: HTMLElement
- private peertubeHooks: Hooks = {}
- private loadedScripts = new Set<string>()
+ private pluginsManager: PluginsManager
static async main () {
const videoContainerId = 'video-wrapper'
if (res.status === HttpStatusCode.UNAUTHORIZED_401) return undefined
return res.json()
- }).then((obj: UserRefreshToken & { code: 'invalid_grant'}) => {
- if (!obj || obj.code === 'invalid_grant') {
+ }).then((obj: UserRefreshToken & { code?: OAuth2ErrorCode }) => {
+ if (!obj || obj.code === OAuth2ErrorCode.INVALID_GRANT) {
Tokens.flush()
this.removeTokensFromHeaders()
this.PeertubePlayerManagerModulePromise
])
- await this.ensurePluginsAreLoaded(serverTranslations)
+ await this.loadPlugins(serverTranslations)
const videoInfo: VideoDetails = videoInfoTmp
videoCaptions,
inactivityTimeout: 2500,
videoViewUrl: this.getVideoUrl(videoInfo.uuid) + '/views',
+ videoShortUUID: videoInfo.shortUUID,
videoUUID: videoInfo.uuid,
isLive: videoInfo.isLive,
webtorrent: {
videoFiles: videoInfo.files
- }
+ },
+
+ pluginsManager: this.pluginsManager
}
if (this.mode === 'p2p-media-loader') {
})
}
- this.runHook('action:embed.player.loaded', undefined, { player: this.player, videojs, video: videoInfo })
+ this.pluginsManager.runHook('action:embed.player.loaded', undefined, { player: this.player, videojs, video: videoInfo })
}
private async initCore () {
return window.location.pathname.split('/')[1] === 'video-playlists'
}
- private async ensurePluginsAreLoaded (translations?: { [ id: string ]: string }) {
- if (this.config.plugin.registered.length === 0) return
-
- for (const plugin of this.config.plugin.registered) {
- for (const key of Object.keys(plugin.clientScripts)) {
- const clientScript = plugin.clientScripts[key]
-
- if (clientScript.scopes.includes('embed') === false) continue
-
- const script = `/plugins/${plugin.name}/${plugin.version}/client-scripts/${clientScript.script}`
+ private loadPlugins (translations?: { [ id: string ]: string }) {
+ this.pluginsManager = new PluginsManager({
+ peertubeHelpersFactory: _ => this.buildPeerTubeHelpers(translations)
+ })
- if (this.loadedScripts.has(script)) continue
+ this.pluginsManager.loadPluginsList(this.config)
- const pluginInfo = {
- plugin,
- clientScript: {
- script,
- scopes: clientScript.scopes
- },
- pluginType: PluginType.PLUGIN,
- isTheme: false
- }
-
- await loadPlugin({
- hooks: this.peertubeHooks,
- pluginInfo,
- onSettingsScripts: () => undefined,
- peertubeHelpersFactory: _ => this.buildPeerTubeHelpers(translations)
- })
- }
- }
+ return this.pluginsManager.ensurePluginsAreLoaded('embed')
}
private buildPeerTubeHelpers (translations?: { [ id: string ]: string }): RegisterClientHelpers {
return {
getBaseStaticRoute: unimplemented,
+ getBaseRouterRoute: unimplemented,
+
getSettings: unimplemented,
isLoggedIn: unimplemented,
}
}
}
-
- private runHook <T> (hookName: ClientHookName, result?: T, params?: any): Promise<T> {
- return runHook(this.peertubeHooks, hookName, result, params)
- }
}
PeerTubeEmbed.main()