mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-02-01 00:18:14 +01:00
Update:Pass mark as finished library settings to media progress update #837
This commit is contained in:
parent
91aea4f754
commit
0782146682
@ -119,6 +119,7 @@ class PlaybackSessionManager {
|
||||
* @returns
|
||||
*/
|
||||
async syncLocalSession(user, sessionJson, deviceInfo) {
|
||||
// TODO: Combine libraryItem query with library query
|
||||
const libraryItem = await Database.libraryItemModel.getOldById(sessionJson.libraryItemId)
|
||||
const episode = sessionJson.episodeId && libraryItem && libraryItem.isPodcast ? libraryItem.media.getEpisode(sessionJson.episodeId) : null
|
||||
if (!libraryItem || (libraryItem.isPodcast && !episode)) {
|
||||
@ -130,6 +131,16 @@ class PlaybackSessionManager {
|
||||
}
|
||||
}
|
||||
|
||||
const library = await Database.libraryModel.findByPk(libraryItem.libraryId)
|
||||
if (!library) {
|
||||
Logger.error(`[PlaybackSessionManager] syncLocalSession: Library not found for session "${sessionJson.displayTitle}" (${sessionJson.id})`)
|
||||
return {
|
||||
id: sessionJson.id,
|
||||
success: false,
|
||||
error: 'Library not found'
|
||||
}
|
||||
}
|
||||
|
||||
sessionJson.userId = user.id
|
||||
sessionJson.serverVersion = serverVersion
|
||||
|
||||
@ -199,7 +210,9 @@ class PlaybackSessionManager {
|
||||
const updateResponse = await user.createUpdateMediaProgressFromPayload({
|
||||
libraryItemId: libraryItem.id,
|
||||
episodeId: session.episodeId,
|
||||
...session.mediaProgressObject
|
||||
...session.mediaProgressObject,
|
||||
markAsFinishedPercentComplete: library.librarySettings.markAsFinishedPercentComplete,
|
||||
markAsFinishedTimeRemaining: library.librarySettings.markAsFinishedTimeRemaining
|
||||
})
|
||||
result.progressSynced = !!updateResponse.mediaProgress
|
||||
if (result.progressSynced) {
|
||||
@ -211,7 +224,9 @@ class PlaybackSessionManager {
|
||||
const updateResponse = await user.createUpdateMediaProgressFromPayload({
|
||||
libraryItemId: libraryItem.id,
|
||||
episodeId: session.episodeId,
|
||||
...session.mediaProgressObject
|
||||
...session.mediaProgressObject,
|
||||
markAsFinishedPercentComplete: library.librarySettings.markAsFinishedPercentComplete,
|
||||
markAsFinishedTimeRemaining: library.librarySettings.markAsFinishedTimeRemaining
|
||||
})
|
||||
result.progressSynced = !!updateResponse.mediaProgress
|
||||
if (result.progressSynced) {
|
||||
@ -330,12 +345,19 @@ class PlaybackSessionManager {
|
||||
* @returns
|
||||
*/
|
||||
async syncSession(user, session, syncData) {
|
||||
// TODO: Combine libraryItem query with library query
|
||||
const libraryItem = await Database.libraryItemModel.getOldById(session.libraryItemId)
|
||||
if (!libraryItem) {
|
||||
Logger.error(`[PlaybackSessionManager] syncSession Library Item not found "${session.libraryItemId}"`)
|
||||
return null
|
||||
}
|
||||
|
||||
const library = await Database.libraryModel.findByPk(libraryItem.libraryId)
|
||||
if (!library) {
|
||||
Logger.error(`[PlaybackSessionManager] syncSession Library not found "${libraryItem.libraryId}"`)
|
||||
return null
|
||||
}
|
||||
|
||||
session.currentTime = syncData.currentTime
|
||||
session.addListeningTime(syncData.timeListened)
|
||||
Logger.debug(`[PlaybackSessionManager] syncSession "${session.id}" (Device: ${session.deviceDescription}) | Total Time Listened: ${session.timeListening}`)
|
||||
@ -346,10 +368,9 @@ class PlaybackSessionManager {
|
||||
// duration no longer required (v2.15.1) but used if available
|
||||
duration: syncData.duration || libraryItem.media.duration || 0,
|
||||
currentTime: syncData.currentTime,
|
||||
progress: session.progress
|
||||
// TODO: Add support for passing in these values from library settings
|
||||
// markAsFinishedTimeRemaining: 5,
|
||||
// markAsFinishedPercentComplete: 95
|
||||
progress: session.progress,
|
||||
markAsFinishedTimeRemaining: library.librarySettings.markAsFinishedTimeRemaining,
|
||||
markAsFinishedPercentComplete: library.librarySettings.markAsFinishedPercentComplete
|
||||
})
|
||||
if (updateResponse.mediaProgress) {
|
||||
SocketAuthority.clientEmitter(user.id, 'user_item_progress_updated', {
|
||||
|
@ -202,6 +202,13 @@ class Library extends Model {
|
||||
return this.extraData?.lastScanMetadataPrecedence || []
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {LibrarySettingsObject}
|
||||
*/
|
||||
get librarySettings() {
|
||||
return this.settings || Library.getDefaultLibrarySettingsForMediaType(this.mediaType)
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Update to use new model
|
||||
*/
|
||||
|
@ -231,8 +231,8 @@ class MediaProgress extends Model {
|
||||
// Check if progress is far enough to mark as finished
|
||||
// - If markAsFinishedPercentComplete is provided, use that otherwise use markAsFinishedTimeRemaining (default 10 seconds)
|
||||
let shouldMarkAsFinished = false
|
||||
if (!this.isFinished && this.duration) {
|
||||
if (!isNullOrNaN(progressPayload.markAsFinishedPercentComplete)) {
|
||||
if (this.duration) {
|
||||
if (!isNullOrNaN(progressPayload.markAsFinishedPercentComplete) && progressPayload.markAsFinishedPercentComplete > 0) {
|
||||
const markAsFinishedPercentComplete = Number(progressPayload.markAsFinishedPercentComplete) / 100
|
||||
shouldMarkAsFinished = markAsFinishedPercentComplete < this.progress
|
||||
if (shouldMarkAsFinished) {
|
||||
@ -247,12 +247,12 @@ class MediaProgress extends Model {
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldMarkAsFinished) {
|
||||
if (!this.isFinished && shouldMarkAsFinished) {
|
||||
this.isFinished = true
|
||||
this.finishedAt = this.finishedAt || Date.now()
|
||||
this.extraData.progress = 1
|
||||
this.changed('extraData', true)
|
||||
} else if (this.isFinished && this.changed('currentTime') && this.currentTime < this.duration) {
|
||||
} else if (this.isFinished && this.changed('currentTime') && !shouldMarkAsFinished) {
|
||||
this.isFinished = false
|
||||
this.finishedAt = null
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user