Added --yes-overwrites option.

This commit is contained in:
alxnull 2019-10-13 18:00:48 +02:00
parent 049c0486bb
commit a295d779ad
4 changed files with 30 additions and 1 deletions

View File

@ -237,6 +237,8 @@ Alternatively, refer to the [developer instructions](#developer-instructions) fo
characters, and avoid "&" and spaces in
filenames
-w, --no-overwrites Do not overwrite files
--yes-overwrites Overwrite all video and metadata files.
This option includes --no-continue.
-c, --continue Force resume of partially downloaded files.
By default, youtube-dl will resume
downloads if possible.

View File

@ -166,6 +166,7 @@ class YoutubeDL(object):
restrictfilenames: Do not allow "&" and spaces in file names
ignoreerrors: Do not stop on download errors.
force_generic_extractor: Force downloader to use the generic extractor
overwrites: Overwrite all video and metadata files.
nooverwrites: Prevent overwriting files.
playliststart: Playlist item to start at.
playlistend: Playlist item to end at.
@ -631,6 +632,13 @@ class YoutubeDL(object):
except UnicodeEncodeError:
self.to_screen('[download] The file has already been downloaded')
def report_file_delete(self, file_name):
"""Report that existing file will be deleted."""
try:
self.to_screen('Deleting already existent file %s' % file_name)
except UnicodeEncodeError:
self.to_screen('Deleting already existent file')
def prepare_filename(self, info_dict):
"""Generate the output filename."""
try:
@ -1903,11 +1911,15 @@ class YoutubeDL(object):
'Requested formats are incompatible for merge and will be merged into mkv.')
# Ensure filename always has a correct extension for successful merge
filename = '%s.%s' % (filename_wo_ext, info_dict['ext'])
if os.path.exists(encodeFilename(filename)):
file_exists = os.path.exists(encodeFilename(filename))
if not self.params.get('overwrites', False) and file_exists:
self.to_screen(
'[download] %s has already been downloaded and '
'merged' % filename)
else:
if file_exists:
self.report_file_delete(filename)
os.remove(encodeFilename(filename))
for f in requested_formats:
new_info = dict(info_dict)
new_info.update(f)
@ -1922,6 +1934,11 @@ class YoutubeDL(object):
info_dict['__postprocessors'] = postprocessors
info_dict['__files_to_merge'] = downloaded
else:
# Delete existing file with --yes-overwrites
if self.params.get('overwrites', False):
if os.path.exists(encodeFilename(filename)):
self.report_file_delete(filename)
os.remove(encodeFilename(filename))
# Just a single file
success = dl(filename, info_dict)
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:

View File

@ -174,6 +174,11 @@ def _real_main(argv=None):
opts.max_sleep_interval = opts.sleep_interval
if opts.ap_mso and opts.ap_mso not in MSO_INFO:
parser.error('Unsupported TV Provider, use --ap-list-mso to get a list of supported TV Providers')
if opts.overwrites:
if opts.nooverwrites:
parser.error('--yes-overwrites conflicts with --no-overwrites')
# --yes-overwrites implies --no-continue
opts.continue_dl = False
def parse_retries(retries):
if retries in ('inf', 'infinite'):
@ -347,6 +352,7 @@ def _real_main(argv=None):
'force_generic_extractor': opts.force_generic_extractor,
'ratelimit': opts.ratelimit,
'nooverwrites': opts.nooverwrites,
'overwrites': opts.overwrites,
'retries': opts.retries,
'fragment_retries': opts.fragment_retries,
'skip_unavailable_fragments': opts.skip_unavailable_fragments,

View File

@ -717,6 +717,10 @@ def parseOpts(overrideArguments=None):
'-w', '--no-overwrites',
action='store_true', dest='nooverwrites', default=False,
help='Do not overwrite files')
filesystem.add_option(
'--yes-overwrites',
action='store_true', dest='overwrites', default=False,
help='Overwrite all video and metadata files. This option includes --no-continue.')
filesystem.add_option(
'-c', '--continue',
action='store_true', dest='continue_dl', default=True,