X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fassets%2Fplayer%2Fpeertube-plugin.ts;h=07c7e33f6f8ff4ac004571f9e1d57da43437ffa4;hb=a45050e09edf6e2d74b6db48196f44ef9ce8fa58;hp=19d1046769281f0738f084e9d0563b3574c41850;hpb=d5692d4088cdd9fde3be6ff34be8ce2816dab0cf;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/assets/player/peertube-plugin.ts b/client/src/assets/player/peertube-plugin.ts index 19d104676..07c7e33f6 100644 --- a/client/src/assets/player/peertube-plugin.ts +++ b/client/src/assets/player/peertube-plugin.ts @@ -1,4 +1,4 @@ -import videojs, { VideoJsPlayer } from 'video.js' +import videojs from 'video.js' import './videojs-components/settings-menu-button' import { PeerTubePluginOptions, @@ -13,6 +13,7 @@ import { getStoredVolume, saveLastSubtitle, saveMuteInStore, + saveVideoWatchHistory, saveVolumeInStore } from './peertube-player-local-storage' @@ -32,20 +33,23 @@ class PeerTubePlugin extends Plugin { private userWatchingVideoInterval: any private lastResolutionChange: ResolutionUpdateData + private isLive: boolean + private menuOpened = false private mouseInControlBar = false private readonly savedInactivityTimeout: number - constructor (player: VideoJsPlayer, options?: PeerTubePluginOptions) { + constructor (player: videojs.Player, options?: PeerTubePluginOptions) { super(player) this.videoViewUrl = options.videoViewUrl this.videoDuration = options.videoDuration this.videoCaptions = options.videoCaptions + this.isLive = options.isLive this.savedInactivityTimeout = player.options_.inactivityTimeout - if (options.autoplay === true) this.player.addClass('vjs-has-autoplay') + if (options.autoplay) this.player.addClass('vjs-has-autoplay') this.player.on('autoplay-failure', () => { this.player.removeClass('vjs-has-autoplay') @@ -117,7 +121,7 @@ class PeerTubePlugin extends Plugin { this.initializePlayer() this.runViewAdd() - if (options.userWatching) this.runUserWatchVideo(options.userWatching) + this.runUserWatchVideo(options.userWatching, options.videoUUID) }) } @@ -152,7 +156,9 @@ class PeerTubePlugin extends Plugin { // After 30 seconds (or 3/4 of the video), add a view to the video let minSecondsToView = 30 - if (this.videoDuration < minSecondsToView) minSecondsToView = (this.videoDuration * 3) / 4 + if (!this.isLive && this.videoDuration < minSecondsToView) { + minSecondsToView = (this.videoDuration * 3) / 4 + } let secondsViewed = 0 this.videoViewInterval = setInterval(() => { @@ -160,7 +166,12 @@ class PeerTubePlugin extends Plugin { secondsViewed += 1 if (secondsViewed > minSecondsToView) { - this.clearVideoViewInterval() + // Restart the loop if this is a live + if (this.isLive) { + secondsViewed = 0 + } else { + this.clearVideoViewInterval() + } this.addViewToVideo().catch(err => console.error(err)) } @@ -168,7 +179,7 @@ class PeerTubePlugin extends Plugin { }, 1000) } - private runUserWatchVideo (options: UserWatching) { + private runUserWatchVideo (options: UserWatching, videoUUID: string) { let lastCurrentTime = 0 this.userWatchingVideoInterval = setInterval(() => { @@ -177,8 +188,12 @@ class PeerTubePlugin extends Plugin { if (currentTime - lastCurrentTime >= 1) { lastCurrentTime = currentTime - this.notifyUserIsWatching(currentTime, options.url, options.authorizationHeader) - .catch(err => console.error('Cannot notify user is watching.', err)) + if (options) { + this.notifyUserIsWatching(currentTime, options.url, options.authorizationHeader) + .catch(err => console.error('Cannot notify user is watching.', err)) + } else { + saveVideoWatchHistory(videoUUID, currentTime) + } } }, this.CONSTANTS.USER_WATCHING_VIDEO_INTERVAL) } @@ -233,12 +248,20 @@ class PeerTubePlugin extends Plugin { } private alterInactivity () { - if (this.menuOpened || this.mouseInControlBar) { + if (this.menuOpened) { this.player.options_.inactivityTimeout = this.savedInactivityTimeout return } - this.player.options_.inactivityTimeout = 1 + if (!this.mouseInControlBar && !this.isTouchEnabled()) { + this.player.options_.inactivityTimeout = 1 + } + } + + private isTouchEnabled () { + return ('ontouchstart' in window) || + navigator.maxTouchPoints > 0 || + navigator.msMaxTouchPoints > 0 } private initCaptions () {