mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
Fix:Mark media as finished if less than 5 seconds remain on a sync and call progress sync again when last track ends #635
This commit is contained in:
parent
6161daeef0
commit
93b8e11378
@ -52,12 +52,12 @@ export default class CastPlayer extends EventEmitter {
|
||||
return
|
||||
}
|
||||
|
||||
// var currentItemId = media.currentItemId
|
||||
var currentItemId = media.media.itemId
|
||||
if (currentItemId && this.currentTrackIndex !== currentItemId - 1) {
|
||||
this.currentTrackIndex = currentItemId - 1
|
||||
}
|
||||
|
||||
// TODO: Emit finished event
|
||||
if (media.playerState !== this.castPlayerState) {
|
||||
this.emit('stateChange', media.playerState)
|
||||
this.castPlayerState = media.playerState
|
||||
|
@ -76,6 +76,7 @@ export default class LocalPlayer extends EventEmitter {
|
||||
this.loadCurrentTrack()
|
||||
} else {
|
||||
console.log(`[LocalPlayer] Ended`)
|
||||
this.emit('finished')
|
||||
}
|
||||
}
|
||||
evtError(error) {
|
||||
|
@ -101,6 +101,7 @@ export default class PlayerHandler {
|
||||
this.player.on('timeupdate', this.playerTimeupdate.bind(this))
|
||||
this.player.on('buffertimeUpdate', this.playerBufferTimeUpdate.bind(this))
|
||||
this.player.on('error', this.playerError.bind(this))
|
||||
this.player.on('finished', this.playerFinished.bind(this))
|
||||
}
|
||||
|
||||
playerError() {
|
||||
@ -111,6 +112,16 @@ export default class PlayerHandler {
|
||||
}
|
||||
}
|
||||
|
||||
playerFinished() {
|
||||
this.stopPlayInterval()
|
||||
|
||||
var currentTime = this.player.getCurrentTime()
|
||||
this.ctx.setCurrentTime(currentTime)
|
||||
|
||||
// TODO: Add listening time between last sync and now?
|
||||
this.sendProgressSync(currentTime)
|
||||
}
|
||||
|
||||
playerStateChange(state) {
|
||||
console.log('[PlayerHandler] Player state change', state)
|
||||
this.playerState = state
|
||||
|
@ -173,9 +173,6 @@ class Server {
|
||||
// Metadata folder static path
|
||||
app.use('/metadata', this.authMiddleware.bind(this), express.static(global.MetadataPath))
|
||||
|
||||
// TODO: Are these necessary?
|
||||
// Downloads folder static path
|
||||
// app.use('/downloads', this.authMiddleware.bind(this), express.static(this.downloadManager.downloadDirPath))
|
||||
// Static folder
|
||||
app.use(express.static(Path.join(global.appRoot, 'static')))
|
||||
|
||||
@ -212,7 +209,7 @@ class Server {
|
||||
const dyanimicRoutes = [
|
||||
'/item/:id',
|
||||
'/item/:id/manage',
|
||||
'/item/:id/chapters',
|
||||
'/audiobook/:id/chapters',
|
||||
'/audiobook/:id/edit',
|
||||
'/library/:library',
|
||||
'/library/:library/search',
|
||||
@ -220,6 +217,7 @@ class Server {
|
||||
'/library/:library/authors',
|
||||
'/library/:library/series/:id?',
|
||||
'/config/users/:id',
|
||||
'/config/users/:id/sessions',
|
||||
'/collection/:id'
|
||||
]
|
||||
dyanimicRoutes.forEach((route) => app.get(route, (req, res) => res.sendFile(Path.join(distPath, 'index.html'))))
|
||||
|
@ -89,7 +89,9 @@ class MediaProgress {
|
||||
}
|
||||
}
|
||||
|
||||
if (this.progress >= 1 && !this.isFinished) {
|
||||
var timeRemaining = this.duration - this.currentTime
|
||||
// If time remaining is less than 5 seconds then mark as finished
|
||||
if ((this.progress >= 1 || (!isNaN(timeRemaining) && timeRemaining < 5)) && !this.isFinished) {
|
||||
this.isFinished = true
|
||||
this.finishedAt = Date.now()
|
||||
this.progress = 1
|
||||
|
Loading…
Reference in New Issue
Block a user