X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fassets%2Fplayer%2Fpeertube-player.ts;h=2c16c87eca0a37452b21291918341dcc5747c40f;hb=5363a766d95ed8654ad3e1b94538f085c2a3a101;hp=1b1ec7a68933fde60690961683a03c63d0a1d48e;hpb=3dfa84940273619ae00f11a5f419a5e4876b2f53;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/assets/player/peertube-player.ts b/client/src/assets/player/peertube-player.ts index 1b1ec7a68..2c16c87ec 100644 --- a/client/src/assets/player/peertube-player.ts +++ b/client/src/assets/player/peertube-player.ts @@ -2,7 +2,6 @@ import { VideoFile } from '../../../../shared/models/videos' import 'videojs-hotkeys' import 'videojs-dock' -import 'videojs-contextmenu' import 'videojs-contextmenu-ui' import './peertube-link-button' import './resolution-menu-button' @@ -35,6 +34,7 @@ function getVideojsOptions (options: { startTime: number | string theaterMode: boolean, videoCaptions: VideoJSCaption[], + language?: string, controls?: boolean, muted?: boolean, loop?: boolean @@ -48,7 +48,7 @@ function getVideojsOptions (options: { poster: options.poster, autoplay: false, inactivityTimeout: options.inactivityTimeout, - playbackRates: [ 0.5, 1, 1.5, 2 ], + playbackRates: [ 0.5, 0.75, 1, 1.25, 1.5, 2 ], plugins: { peertube: { autoplay: options.autoplay, // Use peertube plugin autoplay because we get the file by webtorrent @@ -69,11 +69,33 @@ function getVideojsOptions (options: { Object.assign(videojsOptions.plugins, { hotkeys: { enableVolumeScroll: false, - enableModifiersForNumbers: false + enableModifiersForNumbers: false, + customKeys: { + increasePlaybackRateKey: { + key: function (event) { + return event.key === '>' + }, + handler: function (player) { + player.playbackRate((player.playbackRate() + 0.1).toFixed(2)) + } + }, + decreasePlaybackRateKey: { + key: function (event) { + return event.key === '<' + }, + handler: function (player) { + player.playbackRate((player.playbackRate() - 0.1).toFixed(2)) + } + } + } } }) } + if (options.language && !isDefaultLocale(options.language)) { + Object.assign(videojsOptions, { language: options.language }) + } + return videojsOptions } @@ -179,11 +201,24 @@ function loadLocaleInVideoJS (serverUrl: string, videojs: any, locale: string) { // It is the default locale, nothing to translate if (!path) return Promise.resolve(undefined) - const completeLocale = getCompleteLocale(locale) + let p: Promise + + if (loadLocaleInVideoJS.cache[path]) { + p = Promise.resolve(loadLocaleInVideoJS.cache[path]) + } else { + p = fetch(path + '/player.json') + .then(res => res.json()) + .then(json => { + loadLocaleInVideoJS.cache[path] = json + return json + }) + } - return fetch(path + '/player.json') - .then(res => res.json()) - .then(json => videojs.addLanguage(getShortLocale(completeLocale), json)) + const completeLocale = getCompleteLocale(locale) + return p.then(json => videojs.addLanguage(getShortLocale(completeLocale), json)) +} +namespace loadLocaleInVideoJS { + export const cache: { [ path: string ]: any } = {} } function getServerTranslations (serverUrl: string, locale: string) {