From e9ccfa2fd4221ddff4950d5180ee5c8fb0bf8117 Mon Sep 17 00:00:00 2001 From: Florrie Date: Mon, 25 Feb 2019 12:06:27 -0400 Subject: Metadata (stored, throttle, status, and more) --- metadata-readers.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'metadata-readers.js') 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 -- cgit 1.3.0-6-gf8a5