mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
127 lines
3.4 KiB
JavaScript
127 lines
3.4 KiB
JavaScript
var { bytesPretty } = require('../utils/fileUtils')
|
|
|
|
class AudioTrack {
|
|
constructor(audioTrack = null) {
|
|
this.index = null
|
|
this.ino = null
|
|
|
|
this.path = null
|
|
this.fullPath = null
|
|
this.ext = null
|
|
this.filename = null
|
|
|
|
this.format = null
|
|
this.duration = null
|
|
this.size = null
|
|
this.bitRate = null
|
|
this.language = null
|
|
this.codec = null
|
|
this.timeBase = null
|
|
this.channels = null
|
|
this.channelLayout = null
|
|
|
|
// Storing tags in audio track is unnecessary, tags are stored on audio file
|
|
// this.tagAlbum = null
|
|
// this.tagArtist = null
|
|
// this.tagGenre = null
|
|
// this.tagTitle = null
|
|
// this.tagTrack = null
|
|
|
|
if (audioTrack) {
|
|
this.construct(audioTrack)
|
|
}
|
|
}
|
|
|
|
construct(audioTrack) {
|
|
this.index = audioTrack.index
|
|
this.ino = audioTrack.ino || null
|
|
|
|
this.path = audioTrack.path
|
|
this.fullPath = audioTrack.fullPath
|
|
this.ext = audioTrack.ext
|
|
this.filename = audioTrack.filename
|
|
|
|
this.format = audioTrack.format
|
|
this.duration = audioTrack.duration
|
|
this.size = audioTrack.size
|
|
this.bitRate = audioTrack.bitRate
|
|
this.language = audioTrack.language
|
|
this.codec = audioTrack.codec
|
|
this.timeBase = audioTrack.timeBase
|
|
this.channels = audioTrack.channels
|
|
this.channelLayout = audioTrack.channelLayout
|
|
|
|
// this.tagAlbum = audioTrack.tagAlbum
|
|
// this.tagArtist = audioTrack.tagArtist
|
|
// this.tagGenre = audioTrack.tagGenre
|
|
// this.tagTitle = audioTrack.tagTitle
|
|
// this.tagTrack = audioTrack.tagTrack
|
|
}
|
|
|
|
get name() {
|
|
return `${String(this.index).padStart(3, '0')}: ${this.filename} (${bytesPretty(this.size)}) [${this.duration}]`
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
index: this.index,
|
|
ino: this.ino,
|
|
path: this.path,
|
|
fullPath: this.fullPath,
|
|
ext: this.ext,
|
|
filename: this.filename,
|
|
format: this.format,
|
|
duration: this.duration,
|
|
size: this.size,
|
|
bitRate: this.bitRate,
|
|
language: this.language,
|
|
timeBase: this.timeBase,
|
|
channels: this.channels,
|
|
channelLayout: this.channelLayout,
|
|
// tagAlbum: this.tagAlbum,
|
|
// tagArtist: this.tagArtist,
|
|
// tagGenre: this.tagGenre,
|
|
// tagTitle: this.tagTitle,
|
|
// tagTrack: this.tagTrack
|
|
}
|
|
}
|
|
|
|
setData(probeData) {
|
|
this.index = probeData.index
|
|
this.ino = probeData.ino || null
|
|
|
|
this.path = probeData.path
|
|
this.fullPath = probeData.fullPath
|
|
this.ext = probeData.ext
|
|
this.filename = probeData.filename
|
|
|
|
this.format = probeData.format
|
|
this.duration = probeData.duration
|
|
this.size = probeData.size
|
|
this.bitRate = probeData.bitRate
|
|
this.language = probeData.language
|
|
this.codec = probeData.codec
|
|
this.timeBase = probeData.timeBase
|
|
this.channels = probeData.channels
|
|
this.channelLayout = probeData.channelLayout
|
|
|
|
// this.tagAlbum = probeData.file_tag_album || null
|
|
// this.tagArtist = probeData.file_tag_artist || null
|
|
// this.tagGenre = probeData.file_tag_genre || null
|
|
// this.tagTitle = probeData.file_tag_title || null
|
|
// this.tagTrack = probeData.file_tag_track || null
|
|
}
|
|
|
|
syncFile(newFile) {
|
|
var hasUpdates = false
|
|
var keysToSync = ['path', 'fullPath', 'ext', 'filename']
|
|
keysToSync.forEach((key) => {
|
|
if (newFile[key] !== undefined && newFile[key] !== this[key]) {
|
|
hasUpdates = true
|
|
this[key] = newFile[key]
|
|
}
|
|
})
|
|
return hasUpdates
|
|
}
|
|
}
|
|
module.exports = AudioTrack |