]> jfr.im git - yt-dlp.git/commitdiff
Use `parse_duration` for `--wait-for-video`
authorpukkandan <redacted>
Mon, 6 Dec 2021 18:00:33 +0000 (23:30 +0530)
committerpukkandan <redacted>
Mon, 6 Dec 2021 18:00:33 +0000 (23:30 +0530)
and some minor fix

yt_dlp/YoutubeDL.py
yt_dlp/__init__.py
yt_dlp/utils.py

index 2270986566313cc04879a10df74d77341b3b5c40..57b36b0505765cd0cfe63ce60c3256d9daaefd9e 100644 (file)
@@ -1371,11 +1371,11 @@ def progress(msg):
         min_wait, max_wait = self.params.get('wait_for_video')
         diff = try_get(ie_result, lambda x: x['release_timestamp'] - time.time())
         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')
         elif (diff or 0) <= 0:
             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')
 
         wait_till = time.time() + diff
index 5d20ad8c310c7b87f4c7c4438ff853f6729f2459..3dccdb186f574fe7f103e4ff485206f7175c8615 100644 (file)
@@ -197,12 +197,11 @@ def _real_main(argv=None):
     if opts.concurrent_fragment_downloads <= 0:
         parser.error('Concurrent fragments must be positive')
     if opts.wait_for_video is not None:
-        mobj = re.match(r'(?P<min>\d+)(?:-(?P<max>\d+))?$', opts.wait_for_video)
-        if not mobj:
-            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:
+        min_wait, max_wait, *_ = map(parse_duration, opts.wait_for_video.split('-', 1) + [None])
+        if min_wait is None or (max_wait is None and '-' in opts.wait_for_video):
             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)
 
     def parse_retries(retries, name=''):
index 7ac7a106bd8f5dd44fbe54716e63bccb8cdc45f0..6831f0773d54d78b907ba32443c552805eb79a3d 100644 (file)
@@ -3972,8 +3972,9 @@ def strftime_or_none(timestamp, date_format, default=None):
 def parse_duration(s):
     if not isinstance(s, compat_basestring):
         return None
-
     s = s.strip()
+    if not s:
+        return None
 
     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)