diff options
Diffstat (limited to 'metadata-readers.js')
-rw-r--r-- | metadata-readers.js | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/metadata-readers.js b/metadata-readers.js index 1e6eb1b..64f413a 100644 --- a/metadata-readers.js +++ b/metadata-readers.js @@ -1,8 +1,28 @@ const { promisifyProcess } = require('./general-util') const { spawn } = require('child_process') +// Some probers are sorta inconsistent; this function lets them try again if +// they fail the first time. +const tryAgain = function(times, func) { + return async function(...args) { + let n = 0 + let ret + while (!ret && n < times) { + try { + ret = await func(...args) + } catch (error) { + if (n + 1 === times) { + throw error + } + } + n++ + } + return ret + } +} + const metadataReaders = { - ffprobe: async filePath => { + ffprobe: tryAgain(6, async filePath => { const ffprobe = spawn('ffprobe', [ '-print_format', 'json', '-show_entries', 'stream=codec_name:format', @@ -36,7 +56,7 @@ const metadataReaders = { fileSize: parseInt(data.format.size), bitrate: parseInt(data.format.bit_rate) } - }, + }), getMetadataReaderFor: arg => { return metadataReaders.ffprobe |