1
0
Fork 0

Avoid always resuming the end of the video

This commit is contained in:
Chocobozzz 2023-02-25 16:18:28 +01:00
parent c0687c91b9
commit 6de076222a
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
6 changed files with 23 additions and 13 deletions

View File

@ -91,6 +91,8 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
private hotkeys: Hotkey[] = []
private static VIEW_VIDEO_INTERVAL_MS = 5000
constructor (
private elementRef: ElementRef,
private route: ActivatedRoute,
@ -613,16 +615,18 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
const byLocalStorage = getStoredVideoWatchHistory(video.uuid)
if (byUrl) return timeToInt(urlOptions.startTime)
if (byHistory) return video.userHistory.currentTime
if (byLocalStorage) return byLocalStorage.duration
return 0
let startTime = 0
if (byHistory) startTime = video.userHistory.currentTime
if (byLocalStorage) startTime = byLocalStorage.duration
// If we are at the end of the video, reset the timer
if (video.duration - startTime <= 1) startTime = 0
return startTime
}
let startTime = getStartTime()
// If we are at the end of the video, reset the timer
if (video.duration - startTime <= 1) startTime = 0
const startTime = getStartTime()
const playerCaptions = videoCaptions.map(c => ({
label: c.language.label,
@ -679,6 +683,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
videoViewUrl: video.privacy.id !== VideoPrivacy.PRIVATE
? this.videoService.getVideoViewUrl(video.uuid)
: null,
videoViewIntervalMs: VideoWatchComponent.VIEW_VIDEO_INTERVAL_MS,
authorizationHeader: () => this.authService.getRequestHeaderValue(),
serverUrl: environment.originServerUrl || window.location.origin,

View File

@ -35,6 +35,7 @@ export class ManagerOptionsBuilder {
...pick(commonOptions, [
'videoViewUrl',
'videoViewIntervalMs',
'authorizationHeader',
'startTime',
'videoDuration',

View File

@ -27,9 +27,7 @@ class PeerTubePlugin extends Plugin {
private readonly videoUUID: string
private readonly startTime: number
private readonly CONSTANTS = {
USER_VIEW_VIDEO_INTERVAL: 5000 // Every 5 seconds, notify the user is watching the video
}
private readonly videoViewIntervalMs: number
private videoCaptions: VideoJSCaption[]
private defaultSubtitle: string
@ -48,6 +46,7 @@ class PeerTubePlugin extends Plugin {
this.authorizationHeader = options.authorizationHeader
this.videoUUID = options.videoUUID
this.startTime = timeToInt(options.startTime)
this.videoViewIntervalMs = options.videoViewIntervalMs
this.videoCaptions = options.videoCaptions
this.initialInactivityTimeout = this.player.options_.inactivityTimeout
@ -188,7 +187,7 @@ class PeerTubePlugin extends Plugin {
})
this.player.one('ended', () => {
const currentTime = Math.round(this.player.duration())
const currentTime = Math.floor(this.player.duration())
lastCurrentTime = currentTime
this.notifyUserIsWatching(currentTime, lastViewEvent)
@ -197,7 +196,7 @@ class PeerTubePlugin extends Plugin {
})
this.videoViewInterval = setInterval(() => {
const currentTime = Math.round(this.player.currentTime())
const currentTime = Math.floor(this.player.currentTime())
// No need to update
if (currentTime === lastCurrentTime) return
@ -213,7 +212,7 @@ class PeerTubePlugin extends Plugin {
if (!this.authorizationHeader()) {
saveVideoWatchHistory(this.videoUUID, currentTime)
}
}, this.CONSTANTS.USER_VIEW_VIDEO_INTERVAL)
}, this.videoViewIntervalMs)
}
private notifyUserIsWatching (currentTime: number, viewEvent: VideoViewEvent) {

View File

@ -55,6 +55,8 @@ export interface CommonOptions extends CustomizationOptions {
inactivityTimeout: number
poster: string
videoViewIntervalMs: number
instanceName: string
theaterButton: boolean

View File

@ -108,6 +108,8 @@ type PeerTubePluginOptions = {
isLive: boolean
videoUUID: string
videoViewIntervalMs: number
}
type MetricsPluginOptions = {

View File

@ -217,6 +217,7 @@ export class PlayerManagerOptions {
videoCaptions,
inactivityTimeout: 2500,
videoViewUrl: this.videoFetcher.getVideoViewsUrl(video.uuid),
videoViewIntervalMs: 5000,
metricsUrl: window.location.origin + '/api/v1/metrics/playback',
videoShortUUID: video.shortUUID,