X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fassets%2Fplayer%2Fpeertube-videojs-plugin.ts;h=4fd5a9be22d5fa04a4e98e814849cb7e0468029c;hb=fe05c3acbd48c72ac7e503bebde91830121a0bf1;hp=5cebab6d9a65f03f98c01827565bdfb1a5f62c0d;hpb=bb5d90e62f631af3c899fbe586485e64938a5927;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 5cebab6d9..4fd5a9be2 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts @@ -1,11 +1,13 @@ +// FIXME: something weird with our path definition in tsconfig and typings +// @ts-ignore import * as videojs from 'video.js' + import * as WebTorrent from 'webtorrent' import { VideoFile } from '../../../../shared/models/videos/video.model' import { renderVideo } from './video-renderer' import './settings-menu-button' import { PeertubePluginOptions, UserWatching, VideoJSCaption, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution } from './utils' -import * as CacheChunkStore from 'cache-chunk-store' import { PeertubeChunkStore } from './peertube-chunk-store' import { getAverageBandwidthInStore, @@ -17,6 +19,8 @@ import { saveVolumeInStore } from './peertube-player-local-storage' +const CacheChunkStore = require('cache-chunk-store') + type PlayOptions = { forcePlay?: boolean, seek?: number, @@ -64,8 +68,8 @@ class PeerTubePlugin extends Plugin { private torrent: WebTorrent.Torrent private videoCaptions: VideoJSCaption[] - private renderer - private fakeRenderer + private renderer: any + private fakeRenderer: any private destoyingFakeRenderer = false private autoResolution = true @@ -73,13 +77,13 @@ class PeerTubePlugin extends Plugin { private isAutoResolutionObservation = false private playerRefusedP2P = false - private videoViewInterval - private torrentInfoInterval - private autoQualityInterval - private userWatchingVideoInterval - private addTorrentDelay - private qualityObservationTimer - private runAutoQualitySchedulerTimer + private videoViewInterval: any + private torrentInfoInterval: any + private autoQualityInterval: any + private userWatchingVideoInterval: any + private addTorrentDelay: any + private qualityObservationTimer: any + private runAutoQualitySchedulerTimer: any private downloadSpeeds: number[] = [] @@ -107,6 +111,8 @@ class PeerTubePlugin extends Plugin { const muted = getStoredMute() if (muted !== undefined) this.player.muted(muted) + this.player.duration(options.videoDuration) + this.initializePlayer() this.runTorrentInfoScheduler() this.runViewAdd() @@ -273,7 +279,7 @@ class PeerTubePlugin extends Plugin { const oldTorrent = this.torrent const torrentOptions = { - store: (chunkLength, storeOpts) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { + store: (chunkLength: number, storeOpts: any) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { max: 100 }) } @@ -298,6 +304,9 @@ class PeerTubePlugin extends Plugin { this.flushVideoFile(previousVideoFile) + // Update progress bar (just for the UI), do not wait rendering + if (options.seek) this.player.currentTime(options.seek) + const renderVideoOptions = { autoplay: false, controls: true } renderVideo(torrent.files[ 0 ], this.playerElement, renderVideoOptions, (err, renderer) => { this.renderer = renderer @@ -316,7 +325,7 @@ class PeerTubePlugin extends Plugin { }, options.delay || 0) }) - this.torrent.on('error', err => console.error(err)) + this.torrent.on('error', (err: any) => console.error(err)) this.torrent.on('warning', (err: any) => { // We don't support HTTP tracker but we don't care -> we use the web socket tracker @@ -344,13 +353,13 @@ class PeerTubePlugin extends Plugin { }) } - private tryToPlay (done?: Function) { + private tryToPlay (done?: (err?: Error) => void) { if (!done) done = function () { /* empty */ } const playPromise = this.player.play() if (playPromise !== undefined) { return playPromise.then(done) - .catch(err => { + .catch((err: Error) => { if (err.message.indexOf('The play() request was interrupted by a call to pause()') !== -1) { return } @@ -627,7 +636,7 @@ class PeerTubePlugin extends Plugin { this.player.options_.inactivityTimeout = saveInactivityTimeout } - const settingsDialog = this.player.children_.find(c => c.name_ === 'SettingsDialog') + const settingsDialog = this.player.children_.find((c: any) => c.name_ === 'SettingsDialog') this.player.controlBar.on('mouseenter', () => disableInactivity()) settingsDialog.on('mouseenter', () => disableInactivity()) @@ -703,7 +712,7 @@ class PeerTubePlugin extends Plugin { const percent = time / this.player_.duration() return percent >= 1 ? 1 : percent } - SeekBar.prototype.handleMouseMove = function handleMouseMove (event) { + SeekBar.prototype.handleMouseMove = function handleMouseMove (event: any) { let newTime = this.calculateDistance(event) * this.player_.duration() if (newTime === this.player_.duration()) { newTime = newTime - 0.1