X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=youtube_dl%2Futils.py;h=d4df78071663489752a80a1a833662fe5505ec3b;hb=478c2c619364f5fb0c1ee9e9489048ab4ae26521;hp=9c93209349c971f795280a6d41a12c012918004b;hpb=aafddb2b0a0c6493e5c1e9f92c1570d3c018845b;p=youtube-dl.git diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 9c9320934..d4df78071 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -923,9 +923,6 @@ def _windows_write_string(s, out): 2: -12, } - def ucs2_len(s): - return sum((2 if ord(c) > 0xffff else 1) for c in s) - fileno = out.fileno() if fileno not in WIN_OUTPUT_IDS: return False @@ -959,13 +956,25 @@ def _windows_write_string(s, out): if not_a_console(h): return False - remaining = ucs2_len(s) - while remaining > 0: + def next_nonbmp_pos(s): + try: + return next(i for i, c in enumerate(s) if ord(c) > 0xffff) + except StopIteration: + return len(s) + + while s: + count = min(next_nonbmp_pos(s), 1024) + ret = WriteConsoleW( - h, s, min(remaining, 1024), ctypes.byref(written), None) + h, s, count if count else 2, ctypes.byref(written), None) if ret == 0: raise OSError('Failed to write string') - remaining -= written.value + if not count: # We just wrote a non-BMP character + assert written.value == 2 + s = s[1:] + else: + assert written.value > 0 + s = s[written.value:] return True @@ -1397,3 +1406,14 @@ US_RATINGS = { def strip_jsonp(code): return re.sub(r'(?s)^[a-zA-Z_]+\s*\(\s*(.*)\);\s*?\s*$', r'\1', code) + + +def qualities(quality_ids): + """ Get a numeric quality value out of a list of possible values """ + def q(qid): + try: + return quality_ids.index(qid) + except ValueError: + return -1 + return q +