mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[zdf] Use centralized sorting
This commit is contained in:
		| @@ -1014,6 +1014,8 @@ class YoutubeDL(object): | ||||
|     def list_formats(self, info_dict): | ||||
|         def format_note(fdict): | ||||
|             res = u'' | ||||
|             if f.get('ext') in ['f4f', 'f4m']: | ||||
|                 res += u'(unsupported) ' | ||||
|             if fdict.get('format_note') is not None: | ||||
|                 res += fdict['format_note'] + u' ' | ||||
|             if (fdict.get('vcodec') is not None and | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import xml.etree.ElementTree | ||||
| from ..utils import ( | ||||
|     compat_http_client, | ||||
|     compat_urllib_error, | ||||
|     compat_urllib_parse_urlparse, | ||||
|     compat_str, | ||||
|  | ||||
|     clean_html, | ||||
| @@ -62,6 +63,9 @@ class InfoExtractor(object): | ||||
|                     * vcodec     Name of the video codec in use | ||||
|                     * filesize   The number of bytes, if known in advance | ||||
|                     * player_url SWF Player URL (used for rtmpdump). | ||||
|                     * protocol   The protocol that will be used for the actual | ||||
|                                  download, lower-case. | ||||
|                                  "http", "https", "rtsp", "rtmp" or so. | ||||
|                     * preference Order number of this format. If this field is | ||||
|                                  present, the formats get sorted by this field. | ||||
|                                  -1 for default (order by other properties), | ||||
| @@ -445,7 +449,11 @@ class InfoExtractor(object): | ||||
|  | ||||
|             preference = f.get('preference') | ||||
|             if preference is None: | ||||
|                 preference = 0 if f.get('url', '').startswith('http') else -0.1 | ||||
|                 proto = f.get('protocol') | ||||
|                 if proto is None: | ||||
|                     proto = compat_urllib_parse_urlparse(f.get('url', '')).scheme | ||||
|  | ||||
|                 preference = 0 if proto in ['http', 'https'] else -0.1 | ||||
|                 if f.get('ext') in ['f4f', 'f4m']:  # Not yet supported | ||||
|                     preference -= 0.5 | ||||
|  | ||||
|   | ||||
| @@ -67,29 +67,13 @@ class ZDFIE(InfoExtractor): | ||||
|             ''', format_id) | ||||
|  | ||||
|             ext = format_m.group('container') | ||||
|             is_supported = ext != 'f4f' | ||||
|  | ||||
|             PROTO_ORDER = ['http', 'rtmp', 'rtsp'] | ||||
|             try: | ||||
|                 proto_pref = -PROTO_ORDER.index(format_m.group('proto')) | ||||
|             except ValueError: | ||||
|                 proto_pref = -999 | ||||
|             proto = format_m.group('proto') | ||||
|  | ||||
|             quality = fnode.find('./quality').text | ||||
|             QUALITY_ORDER = ['veryhigh', '300', 'high', 'med', 'low'] | ||||
|             try: | ||||
|                 quality_pref = -QUALITY_ORDER.index(quality) | ||||
|             except ValueError: | ||||
|                 quality_pref = -999 | ||||
|  | ||||
|             abr = int(fnode.find('./audioBitrate').text) // 1000 | ||||
|             vbr = int(fnode.find('./videoBitrate').text) // 1000 | ||||
|             pref = (is_available, is_supported, | ||||
|                     proto_pref, quality_pref, vbr, abr) | ||||
|  | ||||
|             format_note = u'' | ||||
|             if not is_supported: | ||||
|                 format_note += u'(unsupported)' | ||||
|             if not format_note: | ||||
|                 format_note = None | ||||
|  | ||||
| @@ -105,14 +89,16 @@ class ZDFIE(InfoExtractor): | ||||
|                 'height': int(fnode.find('./height').text), | ||||
|                 'filesize': int(fnode.find('./filesize').text), | ||||
|                 'format_note': format_note, | ||||
|                 '_pref': pref, | ||||
|                 'protocol': format_m.group('proto').lower(), | ||||
|                 '_available': is_available, | ||||
|             } | ||||
|  | ||||
|         format_nodes = doc.findall('.//formitaeten/formitaet') | ||||
|         formats = sorted(filter(lambda f: f['_available'], | ||||
|                                 map(xml_to_format, format_nodes)), | ||||
|                          key=operator.itemgetter('_pref')) | ||||
|         formats = list(filter( | ||||
|             lambda f: f['_available'], | ||||
|             map(xml_to_format, format_nodes))) | ||||
|  | ||||
|         self._sort_formats(formats) | ||||
|  | ||||
|         return { | ||||
|             'id': video_id, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister