mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01: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() { | ||||
|     return this.libraryItemsDb.drop().then((results) => { | ||||
|       Logger.info(`[DB] Dropped library items db`, results) | ||||
| @ -425,8 +442,8 @@ class Db { | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   getAllSessions() { | ||||
|     return this.sessionsDb.select(() => true).then((results) => { | ||||
|   getAllSessions(selectFunc = () => true) { | ||||
|     return this.sessionsDb.select(selectFunc).then((results) => { | ||||
|       return results.data || [] | ||||
|     }).catch((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.purgeMetadata() // Remove metadata folders without library item
 | ||||
|     await this.playbackSessionManager.removeInvalidSessions() | ||||
|     await this.cacheManager.ensureCachePaths() | ||||
|     await this.abMergeManager.ensureDownloadDirPath() | ||||
| 
 | ||||
| @ -176,7 +177,6 @@ class Server { | ||||
|     const distPath = Path.join(global.appRoot, '/client/dist') | ||||
|     app.use(express.static(distPath)) | ||||
| 
 | ||||
| 
 | ||||
|     // Metadata folder static path
 | ||||
|     app.use('/metadata', this.authMiddleware.bind(this), express.static(global.MetadataPath)) | ||||
| 
 | ||||
|  | ||||
| @ -244,5 +244,16 @@ class PlaybackSessionManager { | ||||
|       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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user