Add:Experimental tone library for scanning metadata

This commit is contained in:
advplyr 2022-09-11 15:35:06 -05:00
parent 0e98620939
commit c16e6d19ae
12 changed files with 235 additions and 277 deletions

View file

@ -3,9 +3,8 @@ const Path = require('path')
const AudioFile = require('../objects/files/AudioFile')
const VideoFile = require('../objects/files/VideoFile')
const MediaProbePool = require('./MediaProbePool')
const prober = require('../utils/prober')
const toneProber = require('../utils/toneProber')
const Logger = require('../Logger')
const { LogLevel } = require('../utils/constants')
@ -59,7 +58,15 @@ class MediaFileScanner {
async scan(mediaType, libraryFile, mediaMetadataFromScan, verbose = false) {
var probeStart = Date.now()
var probeData = await prober.probe(libraryFile.metadata.path, verbose)
var probeData = null
if (global.ServerSettings.scannerUseTone) {
Logger.debug(`[MediaFileScanner] using tone to probe audio file "${libraryFile.metadata.path}"`)
probeData = await toneProber.probe(libraryFile.metadata.path, true)
} else {
probeData = await prober.probe(libraryFile.metadata.path, verbose)
}
if (probeData.error) {
Logger.error(`[MediaFileScanner] ${probeData.error} : "${libraryFile.metadata.path}"`)
return null
@ -105,35 +112,18 @@ class MediaFileScanner {
async executeMediaFileScans(libraryItem, mediaLibraryFiles, scanData) {
const mediaType = libraryItem.mediaType
if (!global.ServerSettings.scannerUseSingleThreadedProber) { // New multi-threaded scanner
var scanStart = Date.now()
const probeResults = await new Promise((resolve) => {
// const probePool = new MediaProbePool(mediaType, mediaLibraryFiles, scanData, global.ServerSettings.scannerMaxThreads)
const itemBatch = MediaProbePool.initBatch(libraryItem, mediaLibraryFiles, scanData)
itemBatch.on('done', resolve)
MediaProbePool.runBatch(itemBatch)
})
return {
audioFiles: probeResults.audioFiles || [],
videoFiles: probeResults.videoFiles || [],
elapsed: Date.now() - scanStart,
averageScanDuration: probeResults.averageTimePerMb
}
} else { // Old single threaded scanner
var scanStart = Date.now()
var mediaMetadataFromScan = scanData.media.metadata || null
var proms = []
for (let i = 0; i < mediaLibraryFiles.length; i++) {
proms.push(this.scan(mediaType, mediaLibraryFiles[i], mediaMetadataFromScan))
}
var results = await Promise.all(proms).then((scanResults) => scanResults.filter(sr => sr))
return {
audioFiles: results.filter(r => r.audioFile).map(r => r.audioFile),
videoFiles: results.filter(r => r.videoFile).map(r => r.videoFile),
elapsed: Date.now() - scanStart,
averageScanDuration: this.getAverageScanDurationMs(results)
}
var scanStart = Date.now()
var mediaMetadataFromScan = scanData.media.metadata || null
var proms = []
for (let i = 0; i < mediaLibraryFiles.length; i++) {
proms.push(this.scan(mediaType, mediaLibraryFiles[i], mediaMetadataFromScan))
}
var results = await Promise.all(proms).then((scanResults) => scanResults.filter(sr => sr))
return {
audioFiles: results.filter(r => r.audioFile).map(r => r.audioFile),
videoFiles: results.filter(r => r.videoFile).map(r => r.videoFile),
elapsed: Date.now() - scanStart,
averageScanDuration: this.getAverageScanDurationMs(results)
}
}