mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-04-10 14:41:28 +03:00
Additional args now replace existing ones intelligently
This commit is contained in:
@@ -222,4 +222,83 @@ exports.AVAILABLE_PERMISSIONS = [
|
|||||||
|
|
||||||
exports.DETAILS_BIN_PATH = 'node_modules/youtube-dl/bin/details'
|
exports.DETAILS_BIN_PATH = 'node_modules/youtube-dl/bin/details'
|
||||||
|
|
||||||
|
// args that have a value after it (e.g. -o <output> or -f <format>)
|
||||||
|
const YTDL_ARGS_WITH_VALUES = [
|
||||||
|
'--default-search',
|
||||||
|
'--config-location',
|
||||||
|
'--proxy',
|
||||||
|
'--socket-timeout',
|
||||||
|
'--source-address',
|
||||||
|
'--geo-verification-proxy',
|
||||||
|
'--geo-bypass-country',
|
||||||
|
'--geo-bypass-ip-block',
|
||||||
|
'--playlist-start',
|
||||||
|
'--playlist-end',
|
||||||
|
'--playlist-items',
|
||||||
|
'--match-title',
|
||||||
|
'--reject-title',
|
||||||
|
'--max-downloads',
|
||||||
|
'--min-filesize',
|
||||||
|
'--max-filesize',
|
||||||
|
'--date',
|
||||||
|
'--datebefore',
|
||||||
|
'--dateafter',
|
||||||
|
'--min-views',
|
||||||
|
'--max-views',
|
||||||
|
'--match-filter',
|
||||||
|
'--age-limit',
|
||||||
|
'--download-archive',
|
||||||
|
'-r',
|
||||||
|
'--limit-rate',
|
||||||
|
'-R',
|
||||||
|
'--retries',
|
||||||
|
'--fragment-retries',
|
||||||
|
'--buffer-size',
|
||||||
|
'--http-chunk-size',
|
||||||
|
'--external-downloader',
|
||||||
|
'--external-downloader-args',
|
||||||
|
'-a',
|
||||||
|
'--batch-file',
|
||||||
|
'-o',
|
||||||
|
'--output',
|
||||||
|
'--output-na-placeholder',
|
||||||
|
'--autonumber-start',
|
||||||
|
'--load-info-json',
|
||||||
|
'--cookies',
|
||||||
|
'--cache-dir',
|
||||||
|
'--encoding',
|
||||||
|
'--user-agent',
|
||||||
|
'--referer',
|
||||||
|
'--add-header',
|
||||||
|
'--sleep-interval',
|
||||||
|
'--max-sleep-interval',
|
||||||
|
'-f',
|
||||||
|
'--format',
|
||||||
|
'--merge-output-format',
|
||||||
|
'--sub-format',
|
||||||
|
'--sub-lang',
|
||||||
|
'-u',
|
||||||
|
'--username',
|
||||||
|
'-p',
|
||||||
|
'--password',
|
||||||
|
'-2',
|
||||||
|
'--twofactor',
|
||||||
|
'--video-password',
|
||||||
|
'--ap-mso',
|
||||||
|
'--ap-username',
|
||||||
|
'--ap-password',
|
||||||
|
'--audio-format',
|
||||||
|
'--audio-quality',
|
||||||
|
'--recode-video',
|
||||||
|
'--postprocessor-args',
|
||||||
|
'--metadata-from-title',
|
||||||
|
'--fixup',
|
||||||
|
'--ffmpeg-location',
|
||||||
|
'--exec',
|
||||||
|
'--convert-subs'
|
||||||
|
];
|
||||||
|
|
||||||
|
// we're using a Set here for performance
|
||||||
|
exports.YTDL_ARGS_WITH_VALUES = new Set(YTDL_ARGS_WITH_VALUES);
|
||||||
|
|
||||||
exports.CURRENT_VERSION = 'v4.2';
|
exports.CURRENT_VERSION = 'v4.2';
|
||||||
|
|||||||
@@ -485,7 +485,7 @@ exports.generateArgs = async (url, type, options, user_uid = null, simulated = f
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options.additionalArgs && options.additionalArgs !== '') {
|
if (options.additionalArgs && options.additionalArgs !== '') {
|
||||||
downloadConfig = downloadConfig.concat(options.additionalArgs.split(',,'));
|
downloadConfig = utils.injectArgs(downloadConfig, options.additionalArgs.split(',,'));
|
||||||
}
|
}
|
||||||
|
|
||||||
const rate_limit = config_api.getConfigItem('ytdl_download_rate_limit');
|
const rate_limit = config_api.getConfigItem('ytdl_download_rate_limit');
|
||||||
|
|||||||
@@ -386,6 +386,13 @@ describe('Downloader', function() {
|
|||||||
assert(fs.existsSync(nfo_file_path), true);
|
assert(fs.existsSync(nfo_file_path), true);
|
||||||
fs.unlinkSync(nfo_file_path);
|
fs.unlinkSync(nfo_file_path);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Inject args', async function() {
|
||||||
|
const original_args = ['--no-resize-buffer', '-o', '%(title)s', '--no-mtime'];
|
||||||
|
const new_args = ['--age-limit', '25', '--yes-playlist', '--abort-on-error', '-o', '%(id)s'];
|
||||||
|
const updated_args = utils.injectArgs(original_args, new_args);
|
||||||
|
assert(updated_args, ['--no-resize-buffer', '--no-mtime', '--age-limit', '25', '--yes-playlist', '--abort-on-error', '-o', '%(id)s']);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Tasks', function() {
|
describe('Tasks', function() {
|
||||||
|
|||||||
@@ -415,6 +415,38 @@ async function fetchFile(url, path, file_label) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// adds or replaces args according to the following rules:
|
||||||
|
// - if it already exists and has value, then replace both arg and value
|
||||||
|
// - if already exists and doesn't have value, ignore
|
||||||
|
// - if it doesn't exist and has value, add both arg and value
|
||||||
|
// - if it doesn't exist and doesn't have value, add arg
|
||||||
|
function injectArgs(original_args, new_args) {
|
||||||
|
try {
|
||||||
|
for (let i = 0; i < new_args.length; i++) {
|
||||||
|
const new_arg = new_args[i];
|
||||||
|
if (!new_arg.startsWith('-') && !new_arg.startsWith('--')) continue;
|
||||||
|
|
||||||
|
if (CONSTS.YTDL_ARGS_WITH_VALUES.has(new_arg)) {
|
||||||
|
if (original_args.includes(new_arg)) {
|
||||||
|
const original_index = original_args.indexOf(new_arg);
|
||||||
|
original_args.splice(original_index, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
original_args.push(new_arg, new_args[i + 1]);
|
||||||
|
} else {
|
||||||
|
if (!original_args.includes(new_arg)) {
|
||||||
|
original_args.push(new_arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
logger.warn(err);
|
||||||
|
logger.warn(`Failed to inject args (${new_args}) into (${original_args})`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return original_args;
|
||||||
|
}
|
||||||
|
|
||||||
// objects
|
// objects
|
||||||
|
|
||||||
function File(id, title, thumbnailURL, isAudio, duration, url, uploader, size, path, upload_date, description, view_count, height, abr) {
|
function File(id, title, thumbnailURL, isAudio, duration, url, uploader, size, path, upload_date, description, view_count, height, abr) {
|
||||||
@@ -458,5 +490,6 @@ module.exports = {
|
|||||||
wait: wait,
|
wait: wait,
|
||||||
checkExistsWithTimeout: checkExistsWithTimeout,
|
checkExistsWithTimeout: checkExistsWithTimeout,
|
||||||
fetchFile: fetchFile,
|
fetchFile: fetchFile,
|
||||||
|
injectArgs: injectArgs,
|
||||||
File: File
|
File: File
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user