Fix views events with lives

pull/6126/head
Chocobozzz 2023-12-14 11:07:55 +01:00
parent d5fd8227b4
commit 63c4a02ce0
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
2 changed files with 17 additions and 2 deletions

View File

@ -244,6 +244,7 @@ class PeerTubePlugin extends Plugin {
let lastCurrentTime = startTime
let lastViewEvent: VideoViewEvent
let ended = false // player.ended() is too "slow", so handle ended manually
if (this.videoViewInterval) clearInterval(this.videoViewInterval)
if (this.videoViewOnPlayHandler) this.player.off('play', this.videoViewOnPlayHandler)
@ -251,6 +252,8 @@ class PeerTubePlugin extends Plugin {
if (this.videoViewOnEndedHandler) this.player.off('ended', this.videoViewOnEndedHandler)
this.videoViewOnPlayHandler = () => {
debugLogger('Notify user is watching on play: ' + startTime)
this.notifyUserIsWatching(startTime, lastViewEvent)
}
@ -266,13 +269,21 @@ class PeerTubePlugin extends Plugin {
// Don't take into account small forwards
if (diff > 0 && diff < 3) return
debugLogger('Detected seek event for user watching')
lastViewEvent = 'seek'
}
this.videoViewOnEndedHandler = () => {
ended = true
if (this.options.isLive()) return
const currentTime = Math.floor(this.player.duration())
lastCurrentTime = currentTime
debugLogger('Notify user is watching on end: ' + currentTime)
this.notifyUserIsWatching(currentTime, lastViewEvent)
lastViewEvent = undefined
@ -283,11 +294,15 @@ class PeerTubePlugin extends Plugin {
this.player.one('ended', this.videoViewOnEndedHandler)
this.videoViewInterval = setInterval(() => {
if (ended) return
const currentTime = Math.floor(this.player.currentTime())
// No need to update
if (currentTime === lastCurrentTime) return
debugLogger('Notify user is watching: ' + currentTime)
lastCurrentTime = currentTime
this.notifyUserIsWatching(currentTime, lastViewEvent)

View File

@ -50,8 +50,8 @@ export class LocalVideoViewerWatchSectionModel extends Model<Partial<AttributesO
for (const section of watchSections) {
const model = await this.create({
watchStart: section.start,
watchEnd: section.end,
watchStart: section.start || 0,
watchEnd: section.end || 0,
localVideoViewerId
}, { transaction })