mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-25 00:31:26 +01:00
Compare commits
6 Commits
da9480c9ae
...
a4ffe75d5f
Author | SHA1 | Date | |
---|---|---|---|
|
a4ffe75d5f | ||
|
716972da6b | ||
|
5c4df56d6d | ||
|
9438d15dff | ||
|
87ad4d4774 | ||
|
c6cc3a8ab2 |
|
@ -355,6 +355,10 @@ If you fork the project on GitHub, you can run your fork's [build workflow](.git
|
||||||
available. Pass the minimum number of
|
available. Pass the minimum number of
|
||||||
seconds (or range) to wait between retries
|
seconds (or range) to wait between retries
|
||||||
--no-wait-for-video Do not wait for scheduled streams (default)
|
--no-wait-for-video Do not wait for scheduled streams (default)
|
||||||
|
--wait-retries RETRIES Number of retries while waiting for
|
||||||
|
scheduled streams to become available
|
||||||
|
(default is infinite). --wait-for-video must
|
||||||
|
also be set
|
||||||
--mark-watched Mark videos watched (even with --simulate)
|
--mark-watched Mark videos watched (even with --simulate)
|
||||||
--no-mark-watched Do not mark videos watched (default)
|
--no-mark-watched Do not mark videos watched (default)
|
||||||
--color [STREAM:]POLICY Whether to emit color codes in output,
|
--color [STREAM:]POLICY Whether to emit color codes in output,
|
||||||
|
|
|
@ -1619,17 +1619,26 @@ class YoutubeDL:
|
||||||
def _handle_extraction_exceptions(func):
|
def _handle_extraction_exceptions(func):
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
def wrapper(self, *args, **kwargs):
|
def wrapper(self, *args, **kwargs):
|
||||||
|
wait_retries = 0
|
||||||
|
max_wait_retries = self.params.get('wait_retries')
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
return func(self, *args, **kwargs)
|
return func(self, *args, **kwargs)
|
||||||
except (CookieLoadError, DownloadCancelled, LazyList.IndexError, PagedList.IndexError):
|
except (CookieLoadError, DownloadCancelled, LazyList.IndexError, PagedList.IndexError):
|
||||||
raise
|
raise
|
||||||
except ReExtractInfo as e:
|
except ReExtractInfo as e:
|
||||||
|
if wait_retries >= max_wait_retries:
|
||||||
|
if max_wait_retries > 0:
|
||||||
|
self.report_error(f'Giving up after {wait_retries} {"retries" if wait_retries > 1 else "retry"} while waiting.')
|
||||||
|
else:
|
||||||
|
self.report_error('Video is still unavailable after waiting.')
|
||||||
|
return
|
||||||
if e.expected:
|
if e.expected:
|
||||||
self.to_screen(f'{e}; Re-extracting data')
|
self.to_screen(f'{e}; Re-extracting data')
|
||||||
else:
|
else:
|
||||||
self.to_stderr('\r')
|
self.to_stderr('\r')
|
||||||
self.report_warning(f'{e}; Re-extracting data')
|
self.report_warning(f'{e}; Re-extracting data')
|
||||||
|
wait_retries += 1
|
||||||
continue
|
continue
|
||||||
except GeoRestrictedError as e:
|
except GeoRestrictedError as e:
|
||||||
msg = e.msg
|
msg = e.msg
|
||||||
|
|
|
@ -267,6 +267,7 @@ def validate_options(opts):
|
||||||
|
|
||||||
opts.retries = parse_retries('download', opts.retries)
|
opts.retries = parse_retries('download', opts.retries)
|
||||||
opts.fragment_retries = parse_retries('fragment', opts.fragment_retries)
|
opts.fragment_retries = parse_retries('fragment', opts.fragment_retries)
|
||||||
|
opts.wait_retries = parse_retries('waiting', opts.wait_retries)
|
||||||
opts.extractor_retries = parse_retries('extractor', opts.extractor_retries)
|
opts.extractor_retries = parse_retries('extractor', opts.extractor_retries)
|
||||||
opts.file_access_retries = parse_retries('file access', opts.file_access_retries)
|
opts.file_access_retries = parse_retries('file access', opts.file_access_retries)
|
||||||
|
|
||||||
|
@ -927,6 +928,7 @@ def parse_options(argv=None):
|
||||||
'extract_flat': opts.extract_flat,
|
'extract_flat': opts.extract_flat,
|
||||||
'live_from_start': opts.live_from_start,
|
'live_from_start': opts.live_from_start,
|
||||||
'wait_for_video': opts.wait_for_video,
|
'wait_for_video': opts.wait_for_video,
|
||||||
|
'wait_retries': opts.wait_retries,
|
||||||
'mark_watched': opts.mark_watched,
|
'mark_watched': opts.mark_watched,
|
||||||
'merge_output_format': opts.merge_output_format,
|
'merge_output_format': opts.merge_output_format,
|
||||||
'final_ext': final_ext,
|
'final_ext': final_ext,
|
||||||
|
|
|
@ -442,6 +442,10 @@ def create_parser():
|
||||||
'--no-wait-for-video',
|
'--no-wait-for-video',
|
||||||
dest='wait_for_video', action='store_const', const=None,
|
dest='wait_for_video', action='store_const', const=None,
|
||||||
help='Do not wait for scheduled streams (default)')
|
help='Do not wait for scheduled streams (default)')
|
||||||
|
general.add_option(
|
||||||
|
'--wait-retries',
|
||||||
|
dest='wait_retries', metavar='RETRIES', default='infinite',
|
||||||
|
help='Number of retries while waiting for scheduled streams to become available (default is %default). --wait-for-video must also be set')
|
||||||
general.add_option(
|
general.add_option(
|
||||||
'--mark-watched',
|
'--mark-watched',
|
||||||
action='store_true', dest='mark_watched', default=False,
|
action='store_true', dest='mark_watched', default=False,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user