diff --git a/vimeomaster.js b/vimeomaster.js index 06b807c..d254137 100644 --- a/vimeomaster.js +++ b/vimeomaster.js @@ -9,30 +9,30 @@ function loadVideo(num, cb) { let masterUrl = list[num].url; if (!masterUrl.endsWith("?base64_init=1")) { masterUrl += "?base64_init=1"; - } +} - getJson(masterUrl, (err, json) => { +getJson(masterUrl, (err, json) => { if (err) { return cb(err); - } + } - const videoData = json.video - .sort((v1, v2) => v1.avg_bitrate - v2.avg_bitrate) - .pop(); - const audioData = json.audio - .sort((a1, a2) => a1.avg_bitrate - a2.avg_bitrate) - .pop(); + const videoData = json.video + .sort((v1, v2) => v1.avg_bitrate - v2.avg_bitrate) + .pop(); + const audioData = json.audio + .sort((a1, a2) => a1.avg_bitrate - a2.avg_bitrate) + .pop(); - const videoBaseUrl = url.resolve( + const videoBaseUrl = url.resolve( url.resolve(masterUrl, json.base_url), videoData.base_url ); - const audioBaseUrl = url.resolve( + const audioBaseUrl = url.resolve( url.resolve(masterUrl, json.base_url), audioData.base_url ); - processFile( + processFile( "video", videoBaseUrl, videoData.init_segment, @@ -41,9 +41,9 @@ function loadVideo(num, cb) { err => { if (err) { return cb(err); - } + } - processFile( + processFile( "audio", audioBaseUrl, audioData.init_segment, @@ -52,14 +52,14 @@ function loadVideo(num, cb) { err => { if (err) { return cb(err); - } - - cb(null, num + 1); } - ); + + cb(null, num + 1); } ); - }); + } + ); +}); } function processFile(type, baseUrl, initData, segments, filename, cb) { @@ -68,30 +68,30 @@ function processFile(type, baseUrl, initData, segments, filename, cb) { if(fs.existsSync(downloadingFlag)) { log("⚠️", ` ${filename} - ${type} is incomplete, restarting the download`); - } else if (fs.existsSync(filePath)) { +} else if (fs.existsSync(filePath)) { log("⚠️", ` ${filename} - ${type} already exists`); return cb(); - } else { +} else { fs.writeFileSync(downloadingFlag, ''); - } +} - const segmentsUrl = segments.map(seg => baseUrl + seg.url); +const segmentsUrl = segments.map(seg => baseUrl + seg.url); - const initBuffer = Buffer.from(initData, "base64"); - fs.writeFileSync(filePath, initBuffer); +const initBuffer = Buffer.from(initData, "base64"); +fs.writeFileSync(filePath, initBuffer); - const output = fs.createWriteStream(filePath, { +const output = fs.createWriteStream(filePath, { flags: "a" - }); +}); - combineSegments(type, 0, segmentsUrl, output, filePath, downloadingFlag, err => { +combineSegments(type, 0, segmentsUrl, output, filePath, downloadingFlag, err => { if (err) { log("⚠️", ` ${err}`); - } + } - output.end(); - cb(); - }); + output.end(); + cb(); +}); } function combineSegments(type, i, segmentsUrl, output, filename, downloadingFlag, cb) { @@ -99,29 +99,29 @@ function combineSegments(type, i, segmentsUrl, output, filename, downloadingFlag fs.unlinkSync(downloadingFlag); log("🏁", ` ${filename} - ${type} done`); return cb(); - } +} - log( +log( "📦", type === "video" ? "📹" : "🎧", `Downloading ${type} segment ${i}/${segmentsUrl.length} of ${filename}` ); - let req = https - .get(segmentsUrl[i], res => { +let req = https +.get(segmentsUrl[i], res => { res.on("data", d => output.write(d)); res.on("end", () => combineSegments(type, i + 1, segmentsUrl, output, filename, downloadingFlag, cb) ); - }) - .on("error", e => { +}) +.on("error", e => { cb(e); - }); - req.setTimeout(7000, function () { +}); +req.setTimeout(7000, function () { console.log("Timeout. Retrying"); combineSegments(type, i, segmentsUrl, output, filename, downloadingFlag, cb) - }) +}) } function getJson(url, cb) { @@ -132,10 +132,10 @@ function getJson(url, cb) { res.on("data", d => (data += d)); res.on("end", () => cb(null, JSON.parse(data))); - }) +}) .on("error", e => { cb(e); - }); +}); } function initJs(n = 0) { @@ -145,12 +145,12 @@ function initJs(n = 0) { if (err) { log("⚠️", ` ${err}`); return; - } + } - if (list[num]) { + if (list[num]) { initJs(num); - } - }); + } +}); } initJs();