mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-31 02:17:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const { VideoMimeType } = require('../../utils/constants')
 | |
| const FileMetadata = require('../metadata/FileMetadata')
 | |
| 
 | |
| class VideoFile {
 | |
|   constructor(data) {
 | |
|     this.index = null
 | |
|     this.ino = null
 | |
|     this.metadata = null
 | |
|     this.addedAt = null
 | |
|     this.updatedAt = null
 | |
| 
 | |
|     this.format = null
 | |
|     this.duration = null
 | |
|     this.bitRate = null
 | |
|     this.language = null
 | |
|     this.codec = null
 | |
|     this.timeBase = null
 | |
|     this.frameRate = null
 | |
|     this.width = null
 | |
|     this.height = null
 | |
|     this.embeddedCoverArt = null
 | |
| 
 | |
|     this.invalid = false
 | |
|     this.error = null
 | |
| 
 | |
|     if (data) {
 | |
|       this.construct(data)
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   toJSON() {
 | |
|     return {
 | |
|       index: this.index,
 | |
|       ino: this.ino,
 | |
|       metadata: this.metadata.toJSON(),
 | |
|       addedAt: this.addedAt,
 | |
|       updatedAt: this.updatedAt,
 | |
|       invalid: !!this.invalid,
 | |
|       error: this.error || null,
 | |
|       format: this.format,
 | |
|       duration: this.duration,
 | |
|       bitRate: this.bitRate,
 | |
|       language: this.language,
 | |
|       codec: this.codec,
 | |
|       timeBase: this.timeBase,
 | |
|       frameRate: this.frameRate,
 | |
|       width: this.width,
 | |
|       height: this.height,
 | |
|       embeddedCoverArt: this.embeddedCoverArt,
 | |
|       mimeType: this.mimeType
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   construct(data) {
 | |
|     this.index = data.index
 | |
|     this.ino = data.ino
 | |
|     this.metadata = new FileMetadata(data.metadata || {})
 | |
|     this.addedAt = data.addedAt
 | |
|     this.updatedAt = data.updatedAt
 | |
|     this.invalid = !!data.invalid
 | |
|     this.error = data.error || null
 | |
| 
 | |
|     this.format = data.format
 | |
|     this.duration = data.duration
 | |
|     this.bitRate = data.bitRate
 | |
|     this.language = data.language
 | |
|     this.codec = data.codec || null
 | |
|     this.timeBase = data.timeBase
 | |
|     this.frameRate = data.frameRate
 | |
|     this.width = data.width
 | |
|     this.height = data.height
 | |
|     this.embeddedCoverArt = data.embeddedCoverArt || null
 | |
|   }
 | |
| 
 | |
|   get mimeType() {
 | |
|     var format = this.metadata.format.toUpperCase()
 | |
|     if (VideoMimeType[format]) {
 | |
|       return VideoMimeType[format]
 | |
|     } else {
 | |
|       return VideoMimeType.MP4
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   clone() {
 | |
|     return new VideoFile(this.toJSON())
 | |
|   }
 | |
| 
 | |
|   setDataFromProbe(libraryFile, probeData) {
 | |
|     this.ino = libraryFile.ino || null
 | |
| 
 | |
|     this.metadata = libraryFile.metadata.clone()
 | |
|     this.addedAt = Date.now()
 | |
|     this.updatedAt = Date.now()
 | |
| 
 | |
|     const videoStream = probeData.videoStream
 | |
| 
 | |
|     this.format = probeData.format
 | |
|     this.duration = probeData.duration
 | |
|     this.bitRate = videoStream.bit_rate || probeData.bitRate || null
 | |
|     this.language = probeData.language
 | |
|     this.codec = videoStream.codec || null
 | |
|     this.timeBase = videoStream.time_base
 | |
|     this.frameRate = videoStream.frame_rate || null
 | |
|     this.width = videoStream.width || null
 | |
|     this.height = videoStream.height || null
 | |
|     this.embeddedCoverArt = probeData.embeddedCoverArt
 | |
|   }
 | |
| }
 | |
| module.exports = VideoFile |