mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-04-02 01:16:54 +02:00
Fix:Remove invalid playback sessions on server start #868
This commit is contained in:
parent
3b4ac3a230
commit
8416f2d6be
21
server/Db.js
21
server/Db.js
@ -413,6 +413,23 @@ class Db {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removeEntities(entityName, selectFunc) {
|
||||||
|
var entityDb = this.getEntityDb(entityName)
|
||||||
|
return entityDb.delete(selectFunc).then((results) => {
|
||||||
|
Logger.debug(`[DB] Deleted entities ${entityName}: ${results.deleted}`)
|
||||||
|
var arrayKey = this.getEntityArrayKey(entityName)
|
||||||
|
if (this[arrayKey]) {
|
||||||
|
this[arrayKey] = this[arrayKey].filter(e => {
|
||||||
|
return !selectFunc(e)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return results.deleted
|
||||||
|
}).catch((error) => {
|
||||||
|
Logger.error(`[DB] Remove entities ${entityName} Failed: ${error}`)
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
recreateLibraryItemsDb() {
|
recreateLibraryItemsDb() {
|
||||||
return this.libraryItemsDb.drop().then((results) => {
|
return this.libraryItemsDb.drop().then((results) => {
|
||||||
Logger.info(`[DB] Dropped library items db`, results)
|
Logger.info(`[DB] Dropped library items db`, results)
|
||||||
@ -425,8 +442,8 @@ class Db {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
getAllSessions() {
|
getAllSessions(selectFunc = () => true) {
|
||||||
return this.sessionsDb.select(() => true).then((results) => {
|
return this.sessionsDb.select(selectFunc).then((results) => {
|
||||||
return results.data || []
|
return results.data || []
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
Logger.error('[Db] Failed to select sessions', error)
|
Logger.error('[Db] Failed to select sessions', error)
|
||||||
|
@ -143,6 +143,7 @@ class Server {
|
|||||||
|
|
||||||
await this.checkUserMediaProgress() // Remove invalid user item progress
|
await this.checkUserMediaProgress() // Remove invalid user item progress
|
||||||
await this.purgeMetadata() // Remove metadata folders without library item
|
await this.purgeMetadata() // Remove metadata folders without library item
|
||||||
|
await this.playbackSessionManager.removeInvalidSessions()
|
||||||
await this.cacheManager.ensureCachePaths()
|
await this.cacheManager.ensureCachePaths()
|
||||||
await this.abMergeManager.ensureDownloadDirPath()
|
await this.abMergeManager.ensureDownloadDirPath()
|
||||||
|
|
||||||
@ -176,7 +177,6 @@ class Server {
|
|||||||
const distPath = Path.join(global.appRoot, '/client/dist')
|
const distPath = Path.join(global.appRoot, '/client/dist')
|
||||||
app.use(express.static(distPath))
|
app.use(express.static(distPath))
|
||||||
|
|
||||||
|
|
||||||
// Metadata folder static path
|
// Metadata folder static path
|
||||||
app.use('/metadata', this.authMiddleware.bind(this), express.static(global.MetadataPath))
|
app.use('/metadata', this.authMiddleware.bind(this), express.static(global.MetadataPath))
|
||||||
|
|
||||||
|
@ -244,5 +244,16 @@ class PlaybackSessionManager {
|
|||||||
Logger.error(`[PlaybackSessionManager] cleanOrphanStreams failed`, error)
|
Logger.error(`[PlaybackSessionManager] cleanOrphanStreams failed`, error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Android app v0.9.54 and below had a bug where listening time was sending unix timestamp
|
||||||
|
// See https://github.com/advplyr/audiobookshelf/issues/868
|
||||||
|
// Remove playback sessions with listening time too high
|
||||||
|
async removeInvalidSessions() {
|
||||||
|
const selectFunc = (session) => isNaN(session.timeListening) || Number(session.timeListening) > 3600000000
|
||||||
|
const numSessionsRemoved = await this.db.removeEntities('session', selectFunc)
|
||||||
|
if (numSessionsRemoved) {
|
||||||
|
Logger.info(`[PlaybackSessionManager] Removed ${numSessionsRemoved} invalid playback sessions`)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
module.exports = PlaybackSessionManager
|
module.exports = PlaybackSessionManager
|
Loading…
Reference in New Issue
Block a user