mirror of https://github.com/yt-dlp/yt-dlp.git
Use `parse_duration` for `--wait-for-video`
and some minor fix
This commit is contained in:
parent
acc0d6a411
commit
38d79fd16c
|
@ -1371,11 +1371,11 @@ class YoutubeDL(object):
|
||||||
min_wait, max_wait = self.params.get('wait_for_video')
|
min_wait, max_wait = self.params.get('wait_for_video')
|
||||||
diff = try_get(ie_result, lambda x: x['release_timestamp'] - time.time())
|
diff = try_get(ie_result, lambda x: x['release_timestamp'] - time.time())
|
||||||
if diff is None and ie_result.get('live_status') == 'is_upcoming':
|
if diff is None and ie_result.get('live_status') == 'is_upcoming':
|
||||||
diff = random.randrange(min_wait or 0, max_wait) if max_wait else min_wait
|
diff = random.randrange(min_wait, max_wait) if (max_wait and min_wait) else (max_wait or min_wait)
|
||||||
self.report_warning('Release time of video is not known')
|
self.report_warning('Release time of video is not known')
|
||||||
elif (diff or 0) <= 0:
|
elif (diff or 0) <= 0:
|
||||||
self.report_warning('Video should already be available according to extracted info')
|
self.report_warning('Video should already be available according to extracted info')
|
||||||
diff = min(max(diff, min_wait or 0), max_wait or float('inf'))
|
diff = min(max(diff or 0, min_wait or 0), max_wait or float('inf'))
|
||||||
self.to_screen(f'[wait] Waiting for {format_dur(diff)} - Press Ctrl+C to try now')
|
self.to_screen(f'[wait] Waiting for {format_dur(diff)} - Press Ctrl+C to try now')
|
||||||
|
|
||||||
wait_till = time.time() + diff
|
wait_till = time.time() + diff
|
||||||
|
|
|
@ -197,12 +197,11 @@ def _real_main(argv=None):
|
||||||
if opts.concurrent_fragment_downloads <= 0:
|
if opts.concurrent_fragment_downloads <= 0:
|
||||||
parser.error('Concurrent fragments must be positive')
|
parser.error('Concurrent fragments must be positive')
|
||||||
if opts.wait_for_video is not None:
|
if opts.wait_for_video is not None:
|
||||||
mobj = re.match(r'(?P<min>\d+)(?:-(?P<max>\d+))?$', opts.wait_for_video)
|
min_wait, max_wait, *_ = map(parse_duration, opts.wait_for_video.split('-', 1) + [None])
|
||||||
if not mobj:
|
if min_wait is None or (max_wait is None and '-' in opts.wait_for_video):
|
||||||
parser.error('Invalid time range to wait')
|
|
||||||
min_wait, max_wait = map(int_or_none, mobj.group('min', 'max'))
|
|
||||||
if max_wait is not None and max_wait < min_wait:
|
|
||||||
parser.error('Invalid time range to wait')
|
parser.error('Invalid time range to wait')
|
||||||
|
elif max_wait is not None and max_wait < min_wait:
|
||||||
|
parser.error('Minimum time range to wait must not be longer than the maximum')
|
||||||
opts.wait_for_video = (min_wait, max_wait)
|
opts.wait_for_video = (min_wait, max_wait)
|
||||||
|
|
||||||
def parse_retries(retries, name=''):
|
def parse_retries(retries, name=''):
|
||||||
|
|
|
@ -3972,8 +3972,9 @@ def strftime_or_none(timestamp, date_format, default=None):
|
||||||
def parse_duration(s):
|
def parse_duration(s):
|
||||||
if not isinstance(s, compat_basestring):
|
if not isinstance(s, compat_basestring):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
s = s.strip()
|
s = s.strip()
|
||||||
|
if not s:
|
||||||
|
return None
|
||||||
|
|
||||||
days, hours, mins, secs, ms = [None] * 5
|
days, hours, mins, secs, ms = [None] * 5
|
||||||
m = re.match(r'(?:(?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?(?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?Z?$', s)
|
m = re.match(r'(?:(?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?(?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?Z?$', s)
|
||||||
|
|
Loading…
Reference in New Issue