class AudioFile { constructor(data) { this.index = null this.ino = null this.filename = null this.ext = null this.path = null this.fullPath = null this.addedAt = null this.trackNumFromMeta = null this.trackNumFromFilename = 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 this.chapters = [] this.tagAlbum = null this.tagArtist = null this.tagGenre = null this.tagTitle = null this.tagTrack = null this.manuallyVerified = false this.invalid = false this.exclude = false this.error = null if (data) { this.construct(data) } } toJSON() { return { index: this.index, ino: this.ino, filename: this.filename, ext: this.ext, path: this.path, fullPath: this.fullPath, addedAt: this.addedAt, trackNumFromMeta: this.trackNumFromMeta, trackNumFromFilename: this.trackNumFromFilename, manuallyVerified: !!this.manuallyVerified, invalid: !!this.invalid, exclude: !!this.exclude, error: this.error || null, format: this.format, duration: this.duration, size: this.size, bitRate: this.bitRate, language: this.language, timeBase: this.timeBase, channels: this.channels, channelLayout: this.channelLayout, chapters: this.chapters, tagAlbum: this.tagAlbum, tagArtist: this.tagArtist, tagGenre: this.tagGenre, tagTitle: this.tagTitle, tagTrack: this.tagTrack } } construct(data) { this.index = data.index this.ino = data.ino this.filename = data.filename this.ext = data.ext this.path = data.path this.fullPath = data.fullPath this.addedAt = data.addedAt this.manuallyVerified = !!data.manuallyVerified this.invalid = !!data.invalid this.exclude = !!data.exclude this.error = data.error || null this.trackNumFromMeta = data.trackNumFromMeta || null this.trackNumFromFilename = data.trackNumFromFilename || null this.format = data.format this.duration = data.duration this.size = data.size this.bitRate = data.bitRate this.language = data.language this.codec = data.codec this.timeBase = data.timeBase this.channels = data.channels this.channelLayout = data.channelLayout this.chapters = data.chapters this.tagAlbum = data.tagAlbum this.tagArtist = data.tagArtist this.tagGenre = data.tagGenre this.tagTitle = data.tagTitle this.tagTrack = data.tagTrack } setData(data) { this.index = data.index || null this.ino = data.ino || null this.filename = data.filename this.ext = data.ext this.path = data.path this.fullPath = data.fullPath this.addedAt = Date.now() this.trackNumFromMeta = data.trackNumFromMeta || null this.trackNumFromFilename = data.trackNumFromFilename || null this.manuallyVerified = !!data.manuallyVerified this.invalid = !!data.invalid this.exclude = !!data.exclude this.error = data.error || null this.format = data.format this.duration = data.duration this.size = data.size this.bitRate = data.bit_rate || null this.language = data.language this.codec = data.codec this.timeBase = data.time_base this.channels = data.channels this.channelLayout = data.channel_layout this.chapters = data.chapters || [] this.tagAlbum = data.file_tag_album || null this.tagArtist = data.file_tag_artist || null this.tagGenre = data.file_tag_genre || null this.tagTitle = data.file_tag_title || null this.tagTrack = data.file_tag_track || null } clone() { return new AudioFile(this.toJSON()) } 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 = AudioFile