diff --git a/backend/app.js b/backend/app.js index 6f51c45..bb55b2d 100644 --- a/backend/app.js +++ b/backend/app.js @@ -1144,7 +1144,12 @@ async function downloadFileByURL_exec(url, type, options, sessionID = null) { } // store info in download for future use - download['_filename'] = info['_filename']; + if (Array.isArray(info)) { + download['fileNames'] = []; + for (let info_obj of info) download['fileNames'].push(info_obj['_filename']); + } else { + download['_filename'] = info['_filename']; + } download['filesize'] = utils.getExpectedFileSize(info); download_checker = setInterval(() => checkDownloadPercent(download), 1000); } @@ -1621,13 +1626,15 @@ function checkDownloadPercent(download) { be divided by the "total expected bytes." */ const file_id = download['file_id']; - const filename = path.format(path.parse(download['_filename'].substring(0, download['_filename'].length-4))); + // assume it's a playlist for logic reasons + const fileNames = Array.isArray(download['fileNames']) ? download['fileNames'] + : [path.format(path.parse(utils.removeFileExtension(download['_filename'])))]; const resulting_file_size = download['filesize']; if (!resulting_file_size) return; - glob(`${filename}*`, (err, files) => { - let sum_size = 0; + let sum_size = 0; + glob(`{${fileNames.join(',')}, }*`, (err, files) => { files.forEach(file => { try { const file_stats = fs.statSync(file); diff --git a/backend/utils.js b/backend/utils.js index 3524041..cd7c23d 100644 --- a/backend/utils.js +++ b/backend/utils.js @@ -105,20 +105,26 @@ function getDownloadedThumbnail(name, type, customPath = null) { return null; } -function getExpectedFileSize(info_json) { - if (info_json['filesize']) { - return info_json['filesize']; - } +function getExpectedFileSize(input_info_jsons) { + // treat single videos as arrays to have the file sizes checked/added to. makes the code cleaner + const info_jsons = Array.isArray(input_info_jsons) ? input_info_jsons : [input_info_jsons]; - const formats = info_json['format_id'].split('+'); let expected_filesize = 0; - formats.forEach(format_id => { - if (!info_json.formats) return expected_filesize; - info_json.formats.forEach(available_format => { - if (available_format.format_id === format_id && available_format.filesize) { - expected_filesize += available_format.filesize; - } + info_jsons.forEach(info_json => { + if (info_json['filesize']) { + expected_filesize += info_json['filesize']; + return; + } + const formats = info_json['format_id'].split('+'); + let individual_expected_filesize = 0; + formats.forEach(format_id => { + info_json.formats.forEach(available_format => { + if (available_format.format_id === format_id && available_format.filesize) { + individual_expected_filesize += available_format.filesize; + } + }); }); + expected_filesize += individual_expected_filesize; }); return expected_filesize;