diff --git a/vimeomaster.js b/vimeomaster.js index 0048067..d48a00e 100644 --- a/vimeomaster.js +++ b/vimeomaster.js @@ -64,9 +64,15 @@ function loadVideo(num, cb) { function processFile(type, baseUrl, initData, segments, filename, cb) { const filePath = `./parts/${filename}`; - if (fs.existsSync(filePath)) { + const downloadingFlag = `./parts/.${filename}~`; + + if(fs.existsSync(downloadingFlag)) { + log("⚠️", ` ${filename} - ${type} is incomplete, restarting the download`); + } else if (fs.existsSync(filePath)) { log("⚠️", ` ${filename} - ${type} already exists`); return cb(); + } else { + fs.writeFileSync(downloadingFlag, ''); } const segmentsUrl = segments.map(seg => baseUrl + seg.url); @@ -78,7 +84,7 @@ function processFile(type, baseUrl, initData, segments, filename, cb) { flags: "a" }); - combineSegments(type, 0, segmentsUrl, output, filePath, err => { + combineSegments(type, 0, segmentsUrl, output, filePath, downloadingFlag, err => { if (err) { log("⚠️", ` ${err}`); } @@ -88,8 +94,9 @@ function processFile(type, baseUrl, initData, segments, filename, cb) { }); } -function combineSegments(type, i, segmentsUrl, output, filename, cb) { +function combineSegments(type, i, segmentsUrl, output, filename, downloadingFlag, cb) { if (i >= segmentsUrl.length) { + fs.unlinkSync(downloadingFlag); log("🏁", ` ${filename} - ${type} done`); return cb(); } @@ -105,7 +112,7 @@ function combineSegments(type, i, segmentsUrl, output, filename, cb) { res.on("data", d => output.write(d)); res.on("end", () => - combineSegments(type, i + 1, segmentsUrl, output, filename, cb) + combineSegments(type, i + 1, segmentsUrl, output, filename, downloadingFlag, cb) ); }) .on("error", e => {