-import videojs from 'video.js'
import './videojs-components/settings-menu-button'
-import {
- PeerTubePluginOptions,
- ResolutionUpdateData,
- UserWatching,
- VideoJSCaption
-} from './peertube-videojs-typings'
-import { isMobile, timeToInt } from './utils'
+import videojs from 'video.js'
+import { timeToInt } from '@shared/core-utils'
import {
getStoredLastSubtitle,
getStoredMute,
getStoredVolume,
saveLastSubtitle,
saveMuteInStore,
+ saveVideoWatchHistory,
saveVolumeInStore
} from './peertube-player-local-storage'
+import { PeerTubePluginOptions, ResolutionUpdateData, UserWatching, VideoJSCaption } from './peertube-videojs-typings'
+import { isMobile } from './utils'
const Plugin = videojs.getPlugin('plugin')
private userWatchingVideoInterval: any
private lastResolutionChange: ResolutionUpdateData
+ private isLive: boolean
+
private menuOpened = false
private mouseInControlBar = false
private readonly savedInactivityTimeout: number
this.videoViewUrl = options.videoViewUrl
this.videoDuration = options.videoDuration
this.videoCaptions = options.videoCaptions
+ this.isLive = options.isLive
this.savedInactivityTimeout = player.options_.inactivityTimeout
this.initializePlayer()
this.runViewAdd()
- if (options.userWatching) this.runUserWatchVideo(options.userWatching)
+ this.runUserWatchVideo(options.userWatching, options.videoUUID)
})
}
// 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(() => {
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))
}
}, 1000)
}
- private runUserWatchVideo (options: UserWatching) {
+ private runUserWatchVideo (options: UserWatching, videoUUID: string) {
let lastCurrentTime = 0
this.userWatchingVideoInterval = setInterval(() => {
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)
}