Fix views events with lives
This commit is contained in:
parent
d5fd8227b4
commit
63c4a02ce0
2 changed files with 17 additions and 2 deletions
|
@ -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)
|
||||
|
|
|
@ -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 })
|
||||
|
||||
|
|
Loading…
Reference in a new issue