Merge pull request #15 from linomassarani/14-feature/incompleted-downloads

14 feature/incompleted downloads
This commit is contained in:
Tusko Trush 2020-07-15 22:30:10 +03:00 committed by GitHub
commit 10f453e0e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -64,9 +64,15 @@ function loadVideo(num, cb) {
function processFile(type, baseUrl, initData, segments, filename, cb) { function processFile(type, baseUrl, initData, segments, filename, cb) {
const filePath = `./parts/${filename}`; 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`); log("⚠️", ` ${filename} - ${type} already exists`);
return cb(); return cb();
} else {
fs.writeFileSync(downloadingFlag, '');
} }
const segmentsUrl = segments.map(seg => baseUrl + seg.url); const segmentsUrl = segments.map(seg => baseUrl + seg.url);
@ -78,7 +84,7 @@ function processFile(type, baseUrl, initData, segments, filename, cb) {
flags: "a" flags: "a"
}); });
combineSegments(type, 0, segmentsUrl, output, filePath, err => { combineSegments(type, 0, segmentsUrl, output, filePath, downloadingFlag, err => {
if (err) { if (err) {
log("⚠️", ` ${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) { if (i >= segmentsUrl.length) {
fs.unlinkSync(downloadingFlag);
log("🏁", ` ${filename} - ${type} done`); log("🏁", ` ${filename} - ${type} done`);
return cb(); return cb();
} }
@ -105,7 +112,7 @@ function combineSegments(type, i, segmentsUrl, output, filename, cb) {
res.on("data", d => output.write(d)); res.on("data", d => output.write(d));
res.on("end", () => res.on("end", () =>
combineSegments(type, i + 1, segmentsUrl, output, filename, cb) combineSegments(type, i + 1, segmentsUrl, output, filename, downloadingFlag, cb)
); );
}) })
.on("error", e => { .on("error", e => {