[pluralsight] Until listing formats request only single format
authorSergey M․ <dstftw@gmail.com>
Sat, 21 Nov 2015 18:42:58 +0000 (00:42 +0600)
committerSergey M․ <dstftw@gmail.com>
Sat, 21 Nov 2015 18:42:58 +0000 (00:42 +0600)
youtube_dl/extractor/pluralsight.py

index 8481a10b0c23900bd8197fa271dc9711caf0b5cf..16de0fd1c6ce73f28544699024c535d336cc88ee 100644 (file)
@@ -2,6 +2,7 @@ from __future__ import unicode_literals
 
 import json
 import random
+import collections
 
 from .common import InfoExtractor
 from ..compat import (
@@ -131,13 +132,30 @@ class PluralsightIE(PluralsightBaseIE):
             'high': {'width': 1024, 'height': 768},
         }
 
+        AllowedQuality = collections.namedtuple('AllowedQuality', ['ext', 'qualities'])
+
         ALLOWED_QUALITIES = (
-            ('webm', ('high',)),
-            ('mp4', ('low', 'medium', 'high',)),
+            AllowedQuality('webm', ('high',)),
+            AllowedQuality('mp4', ('low', 'medium', 'high',)),
         )
 
+        if self._downloader.params.get('listformats', False):
+            allowed_qualities = ALLOWED_QUALITIES
+        else:
+            def guess_allowed_qualities():
+                req_format = self._downloader.params.get('format') or 'best'
+                req_format_split = req_format.split('-')
+                if len(req_format_split) > 1:
+                    req_ext, req_quality = req_format_split
+                    for allowed_quality in ALLOWED_QUALITIES:
+                        if req_ext == allowed_quality.ext and req_quality in allowed_quality.qualities:
+                            return (AllowedQuality(req_ext, (req_quality, )), )
+                req_ext = 'webm' if self._downloader.params.get('prefer_free_formats') else 'mp4'
+                return (AllowedQuality(req_ext, ('high', )), )
+            allowed_qualities = guess_allowed_qualities()
+
         formats = []
-        for ext, qualities in ALLOWED_QUALITIES:
+        for ext, qualities in allowed_qualities:
             for quality in qualities:
                 f = QUALITIES[quality].copy()
                 clip_post = {