Update:Local session sync lock to prevent duplicate inserts

This commit is contained in:
advplyr 2022-08-23 18:10:06 -05:00
parent 67f6cd3c56
commit e611d7a8fd

View File

@ -19,6 +19,7 @@ class PlaybackSessionManager {
this.clientEmitter = clientEmitter this.clientEmitter = clientEmitter
this.sessions = [] this.sessions = []
this.localSessionLock = {}
} }
getSession(sessionId) { getSession(sessionId) {
@ -58,12 +59,19 @@ class PlaybackSessionManager {
} }
async syncLocalSessionRequest(user, sessionJson, res) { async syncLocalSessionRequest(user, sessionJson, res) {
if (this.localSessionLock[sessionJson.id]) {
Logger.debug(`[PlaybackSessionManager] syncLocalSessionRequest: Local session is locked and already syncing`)
return res.sendStatus(200)
}
var libraryItem = this.db.getLibraryItem(sessionJson.libraryItemId) var libraryItem = this.db.getLibraryItem(sessionJson.libraryItemId)
if (!libraryItem) { if (!libraryItem) {
Logger.error(`[PlaybackSessionManager] syncLocalSessionRequest: Library item not found for session "${sessionJson.libraryItemId}"`) Logger.error(`[PlaybackSessionManager] syncLocalSessionRequest: Library item not found for session "${sessionJson.libraryItemId}"`)
return res.sendStatus(200) return res.sendStatus(200)
} }
this.localSessionLock[sessionJson.id] = true // Lock local session
var session = await this.db.getPlaybackSession(sessionJson.id) var session = await this.db.getPlaybackSession(sessionJson.id)
if (!session) { if (!session) {
// New session from local // New session from local
@ -94,6 +102,9 @@ class PlaybackSessionManager {
data: itemProgress.toJSON() data: itemProgress.toJSON()
}) })
} }
delete this.localSessionLock[sessionJson.id] // Unlock local session
res.sendStatus(200) res.sendStatus(200)
} }