mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-31 10:27:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const DEFAULT_EXPIRATION = 1000 * 60 * 60 // 60 minutes
 | |
| const DEFAULT_TIMEOUT = 1000 * 60 * 30 // 30 minutes
 | |
| class Download {
 | |
|   constructor(download) {
 | |
|     this.id = null
 | |
|     this.libraryItemId = null
 | |
|     this.type = null
 | |
| 
 | |
|     this.dirpath = null
 | |
|     this.path = null
 | |
|     this.ext = null
 | |
|     this.filename = null
 | |
|     this.size = 0
 | |
| 
 | |
|     this.userId = null
 | |
|     this.isReady = false
 | |
|     this.isTimedOut = false
 | |
| 
 | |
|     this.startedAt = null
 | |
|     this.finishedAt = null
 | |
|     this.expiresAt = null
 | |
| 
 | |
|     this.expirationTimeMs = 0
 | |
|     this.timeoutTimeMs = 0
 | |
| 
 | |
|     this.timeoutTimer = null
 | |
|     this.expirationTimer = null
 | |
| 
 | |
|     if (download) {
 | |
|       this.construct(download)
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   get mimeType() {
 | |
|     if (this.ext === '.mp3' || this.ext === '.m4b' || this.ext === '.m4a') {
 | |
|       return 'audio/mpeg'
 | |
|     } else if (this.ext === '.mp4') {
 | |
|       return 'audio/mp4'
 | |
|     } else if (this.ext === '.ogg') {
 | |
|       return 'audio/ogg'
 | |
|     } else if (this.ext === '.aac' || this.ext === '.m4p') {
 | |
|       return 'audio/aac'
 | |
|     }
 | |
|     return 'audio/mpeg'
 | |
|   }
 | |
| 
 | |
|   toJSON() {
 | |
|     return {
 | |
|       id: this.id,
 | |
|       libraryItemId: this.libraryItemId,
 | |
|       type: this.type,
 | |
|       dirpath: this.dirpath,
 | |
|       path: this.path,
 | |
|       ext: this.ext,
 | |
|       filename: this.filename,
 | |
|       size: this.size,
 | |
|       userId: this.userId,
 | |
|       isReady: this.isReady,
 | |
|       startedAt: this.startedAt,
 | |
|       finishedAt: this.finishedAt,
 | |
|       expirationSeconds: this.expirationSeconds
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   construct(download) {
 | |
|     this.id = download.id
 | |
|     this.libraryItemId = download.libraryItemId
 | |
|     this.type = download.type
 | |
| 
 | |
|     this.dirpath = download.dirpath
 | |
|     this.path = download.path
 | |
|     this.ext = download.ext
 | |
|     this.filename = download.filename
 | |
|     this.size = download.size || 0
 | |
| 
 | |
|     this.userId = download.userId
 | |
|     this.isReady = !!download.isReady
 | |
| 
 | |
|     this.startedAt = download.startedAt
 | |
|     this.finishedAt = download.finishedAt || null
 | |
| 
 | |
|     this.expirationTimeMs = download.expirationTimeMs || DEFAULT_EXPIRATION
 | |
|     this.timeoutTimeMs = download.timeoutTimeMs || DEFAULT_TIMEOUT
 | |
| 
 | |
|     this.expiresAt = download.expiresAt || null
 | |
|   }
 | |
| 
 | |
|   setData(downloadData) {
 | |
|     downloadData.startedAt = Date.now()
 | |
|     downloadData.isProcessing = true
 | |
|     this.construct(downloadData)
 | |
|   }
 | |
| 
 | |
|   setComplete(fileSize) {
 | |
|     this.finishedAt = Date.now()
 | |
|     this.size = fileSize
 | |
|     this.isReady = true
 | |
|     this.expiresAt = this.finishedAt + this.expirationTimeMs
 | |
|   }
 | |
| 
 | |
|   setExpirationTimer(callback) {
 | |
|     this.expirationTimer = setTimeout(() => {
 | |
|       if (callback) {
 | |
|         callback(this)
 | |
|       }
 | |
|     }, this.expirationTimeMs)
 | |
|   }
 | |
| 
 | |
|   setTimeoutTimer(callback) {
 | |
|     this.timeoutTimer = setTimeout(() => {
 | |
|       if (callback) {
 | |
|         this.isTimedOut = true
 | |
|         callback(this)
 | |
|       }
 | |
|     }, this.timeoutTimeMs)
 | |
|   }
 | |
| 
 | |
|   clearTimeoutTimer() {
 | |
|     clearTimeout(this.timeoutTimer)
 | |
|   }
 | |
| 
 | |
|   clearExpirationTimer() {
 | |
|     clearTimeout(this.expirationTimer)
 | |
|   }
 | |
| }
 | |
| module.exports = Download |