mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-06-02 10:29:28 +00:00
[utils] Handle ss:xxx in parse_duration(), based on yt-dlp 8bd1c00bf399ba7002fc21cd399c931e9d301bd8
This commit is contained in:
parent
645d7a399c
commit
059ef5b55e
|
@ -654,6 +654,8 @@ class TestUtil(unittest.TestCase):
|
||||||
self.assertEqual(parse_duration('PT1H0.040S'), 3600.04)
|
self.assertEqual(parse_duration('PT1H0.040S'), 3600.04)
|
||||||
self.assertEqual(parse_duration('PT00H03M30SZ'), 210)
|
self.assertEqual(parse_duration('PT00H03M30SZ'), 210)
|
||||||
self.assertEqual(parse_duration('P0Y0M0DT0H4M20.880S'), 260.88)
|
self.assertEqual(parse_duration('P0Y0M0DT0H4M20.880S'), 260.88)
|
||||||
|
self.assertEqual(parse_duration('01:02:03:050'), 3723.05)
|
||||||
|
self.assertEqual(parse_duration('103:050'), 103.05)
|
||||||
|
|
||||||
def test_fix_xml_ampersands(self):
|
def test_fix_xml_ampersands(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
|
|
@ -3967,12 +3967,14 @@ def parse_duration(s):
|
||||||
if not isinstance(s, compat_basestring):
|
if not isinstance(s, compat_basestring):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
s = s.strip()
|
m = re.match(r'''(?x)\s*
|
||||||
|
(?P<before_secs>
|
||||||
days, hours, mins, secs, ms = [None] * 5
|
(?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?
|
||||||
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)
|
(?P<secs>(?(before_secs)[0-9]{1,2}|[0-9]+))
|
||||||
|
(?P<ms>[.:][0-9]+)?Z?\s*$
|
||||||
|
''', s)
|
||||||
if m:
|
if m:
|
||||||
days, hours, mins, secs, ms = m.groups()
|
days, hours, mins, secs, ms = m.group('days', 'hours', 'mins', 'secs', 'ms')
|
||||||
else:
|
else:
|
||||||
m = re.match(
|
m = re.match(
|
||||||
r'''(?ix)(?:P?
|
r'''(?ix)(?:P?
|
||||||
|
@ -4004,6 +4006,7 @@ def parse_duration(s):
|
||||||
m = re.match(r'(?i)(?:(?P<hours>[0-9.]+)\s*(?:hours?)|(?P<mins>[0-9.]+)\s*(?:mins?\.?|minutes?)\s*)Z?$', s)
|
m = re.match(r'(?i)(?:(?P<hours>[0-9.]+)\s*(?:hours?)|(?P<mins>[0-9.]+)\s*(?:mins?\.?|minutes?)\s*)Z?$', s)
|
||||||
if m:
|
if m:
|
||||||
hours, mins = m.groups()
|
hours, mins = m.groups()
|
||||||
|
days = secs = ms = None
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -4017,7 +4020,7 @@ def parse_duration(s):
|
||||||
if days:
|
if days:
|
||||||
duration += float(days) * 24 * 60 * 60
|
duration += float(days) * 24 * 60 * 60
|
||||||
if ms:
|
if ms:
|
||||||
duration += float(ms)
|
duration += float(ms.replace(':', '.'))
|
||||||
return duration
|
return duration
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue