Compare commits

..

2 Commits

3 changed files with 23 additions and 39 deletions

View File

@@ -1159,12 +1159,7 @@ async function downloadFileByURL_exec(url, type, options, sessionID = null) {
return; return;
} else { } else {
// store info in download for future use // store info in download for future use
if (Array.isArray(info)) { download['_filename'] = info['_filename'];
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['filesize'] = utils.getExpectedFileSize(info);
} }
@@ -1244,7 +1239,7 @@ async function downloadFileByURL_exec(url, type, options, sessionID = null) {
if (options.merged_string !== null && options.merged_string !== undefined) { if (options.merged_string !== null && options.merged_string !== undefined) {
let current_merged_archive = fs.readFileSync(path.join(fileFolderPath, `merged_${type}.txt`), 'utf8'); let current_merged_archive = fs.readFileSync(path.join(fileFolderPath, `merged_${type}.txt`), 'utf8');
let diff = current_merged_archive.replace(options.merged_string, ''); let diff = current_merged_archive.replace(options.merged_string, '');
const archive_path = options.user ? path.join(fileFolderPath, 'archives', `archive_${type}.txt`) : path.join(archivePath, `archive_${type}.txt`); const archive_path = options.user ? path.join(config_api.getConfigItem('ytdl_users_base_path'), options.user, 'archives', `archive_${type}.txt`) : path.join(archivePath, `archive_${type}.txt`);
fs.appendFileSync(archive_path, diff); fs.appendFileSync(archive_path, diff);
} }
@@ -1379,7 +1374,7 @@ async function downloadFileByURL_normal(url, type, options, sessionID = null) {
if (options.merged_string !== null && options.merged_string !== undefined) { if (options.merged_string !== null && options.merged_string !== undefined) {
let current_merged_archive = fs.readFileSync(path.join(fileFolderPath, `merged_${type}.txt`), 'utf8'); let current_merged_archive = fs.readFileSync(path.join(fileFolderPath, `merged_${type}.txt`), 'utf8');
let diff = current_merged_archive.replace(options.merged_string, ''); let diff = current_merged_archive.replace(options.merged_string, '');
const archive_path = options.user ? path.join(fileFolderPath, 'archives', `archive_${type}.txt`) : path.join(archivePath, `archive_${type}.txt`); const archive_path = options.user ? path.join(config_api.getConfigItem('ytdl_users_base_path'), options.user, 'archives', `archive_${type}.txt`) : path.join(archivePath, `archive_${type}.txt`);
fs.appendFileSync(archive_path, diff); fs.appendFileSync(archive_path, diff);
} }
@@ -1480,7 +1475,7 @@ async function generateArgs(url, type, options) {
let useYoutubeDLArchive = config_api.getConfigItem('ytdl_use_youtubedl_archive'); let useYoutubeDLArchive = config_api.getConfigItem('ytdl_use_youtubedl_archive');
if (useYoutubeDLArchive) { if (useYoutubeDLArchive) {
const archive_folder = options.user ? path.join(fileFolderPath, 'archives') : archivePath; const archive_folder = options.user ? path.join(config_api.getConfigItem('ytdl_users_base_path'), options.user, 'archives') : archivePath;
const archive_path = path.join(archive_folder, `archive_${type}.txt`); const archive_path = path.join(archive_folder, `archive_${type}.txt`);
fs.ensureDirSync(archive_folder); fs.ensureDirSync(archive_folder);
@@ -1490,7 +1485,7 @@ async function generateArgs(url, type, options) {
fs.closeSync(fs.openSync(archive_path, 'w')); fs.closeSync(fs.openSync(archive_path, 'w'));
} }
let blacklist_path = options.user ? path.join(fileFolderPath, 'archives', `blacklist_${type}.txt`) : path.join(archivePath, `blacklist_${type}.txt`); let blacklist_path = options.user ? path.join(config_api.getConfigItem('ytdl_users_base_path'), options.user, 'archives', `blacklist_${type}.txt`) : path.join(archivePath, `blacklist_${type}.txt`);
// create blacklist file if it doesn't exist // create blacklist file if it doesn't exist
if (!fs.existsSync(blacklist_path)) { if (!fs.existsSync(blacklist_path)) {
fs.closeSync(fs.openSync(blacklist_path, 'w')); fs.closeSync(fs.openSync(blacklist_path, 'w'));
@@ -1618,15 +1613,12 @@ function checkDownloadPercent(download) {
Any file that starts with <video title> will be counted as part of the "bytes downloaded", which will Any file that starts with <video title> will be counted as part of the "bytes downloaded", which will
be divided by the "total expected bytes." be divided by the "total expected bytes."
*/ */
// assume it's a playlist for logic reasons const file_id = download['file_id'];
const fileNames = Array.isArray(download['fileNames']) ? download['fileNames'] const filename = path.format(path.parse(download['_filename'].substring(0, download['_filename'].length-4)));
: [path.format(path.parse(download['_filename'].substring(0, download['_filename'].length-4)))];
const resulting_file_size = download['filesize']; const resulting_file_size = download['filesize'];
let sum_size = 0;
let glob_str = ''; glob(`${filename}*`, (err, files) => {
glob(`{${fileNames.join(',')}, }*`, (err, files) => { let sum_size = 0;
files.forEach(file => { files.forEach(file => {
try { try {
const file_stats = fs.statSync(file); const file_stats = fs.statSync(file);
@@ -1998,7 +1990,7 @@ app.post('/api/getFile', optionalJwt, function (req, res) {
} }
}); });
app.post('/api/getAllFiles', optionalJwt, function (req, res) { app.post('/api/getAllFiles', optionalJwt, async function (req, res) {
// these are returned // these are returned
let files = []; let files = [];
let playlists = []; let playlists = [];
@@ -2008,7 +2000,7 @@ app.post('/api/getAllFiles', optionalJwt, function (req, res) {
let audios = null; let audios = null;
let audio_playlists = null; let audio_playlists = null;
let video_playlists = null; let video_playlists = null;
let subscriptions = subscriptions_api.getAllSubscriptions(req.isAuthenticated() ? req.user.uid : null); let subscriptions = config_api.getConfigItem('ytdl_allow_subscriptions') ? (subscriptions_api.getAllSubscriptions(req.isAuthenticated() ? req.user.uid : null)) : [];
// get basic info depending on multi-user mode being enabled // get basic info depending on multi-user mode being enabled
if (req.isAuthenticated()) { if (req.isAuthenticated()) {

View File

@@ -397,7 +397,7 @@ exports.deleteUserFile = function(user_uid, file_uid, type, blacklistMode = fals
// use subscriptions API to remove video from the archive file, and write it to the blacklist // use subscriptions API to remove video from the archive file, and write it to the blacklist
if (fs.existsSync(archive_path)) { if (fs.existsSync(archive_path)) {
const line = youtube_id ? subscriptions_api.removeIDFromArchive(archive_path, youtube_id) : null; let line = youtube_id ? subscriptions_api.removeIDFromArchive(archive_path, youtube_id) : null;
if (blacklistMode && line) { if (blacklistMode && line) {
let blacklistPath = path.join(usersFileFolder, user_uid, 'archives', `blacklist_${type}.txt`); let blacklistPath = path.join(usersFileFolder, user_uid, 'archives', `blacklist_${type}.txt`);
// adds newline to the beginning of the line // adds newline to the beginning of the line

View File

@@ -105,27 +105,19 @@ function getDownloadedThumbnail(name, type, customPath = null) {
return null; return null;
} }
function getExpectedFileSize(input_info_jsons) { function getExpectedFileSize(info_json) {
// treat single videos as arrays to have the file sizes checked/added to. makes the code cleaner if (info_json['filesize']) {
const info_jsons = Array.isArray(input_info_jsons) ? input_info_jsons : [input_info_jsons]; return info_json['filesize'];
}
const formats = info_json['format_id'].split('+');
let expected_filesize = 0; let expected_filesize = 0;
formats.forEach(format_id => {
info_jsons.forEach(info_json => { info_json.formats.forEach(available_format => {
if (info_json['filesize']) { if (available_format.format_id === format_id && available_format.filesize) {
expected_filesize += info_json['filesize']; expected_filesize += available_format.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; return expected_filesize;