Merge remote-tracking branch 'rzhxeo/youporn-hd'
authorPhilipp Hagemeister <phihag@phihag.de>
Wed, 28 Aug 2013 16:22:28 +0000 (18:22 +0200)
committerPhilipp Hagemeister <phihag@phihag.de>
Wed, 28 Aug 2013 16:22:28 +0000 (18:22 +0200)
Conflicts:
youtube_dl/utils.py

1  2 
youtube_dl/utils.py

diff --combined youtube_dl/utils.py
index 64ab3091070013f840e44bf6c29a808fa75c47d1,ee8df6a5b844054287d1e6a78668e23746058abd..b3d0f64ea9162876f5cd3d517ef77a9b631c781e
@@@ -1,20 -1,19 +1,20 @@@
  #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  
 +import datetime
 +import email.utils
  import errno
  import gzip
  import io
  import json
  import locale
  import os
 +import platform
  import re
 +import socket
  import sys
  import traceback
  import zlib
 -import email.utils
 -import socket
 -import datetime
  
  try:
      import urllib.request as compat_urllib_request
@@@ -61,11 -60,6 +61,11 @@@ try
  except ImportError: # Python 2
      import httplib as compat_http_client
  
 +try:
 +    from urllib.error import HTTPError as compat_HTTPError
 +except ImportError:  # Python 2
 +    from urllib2 import HTTPError as compat_HTTPError
 +
  try:
      from subprocess import DEVNULL
      compat_subprocess_get_DEVNULL = lambda: DEVNULL
@@@ -495,7 -489,7 +495,7 @@@ def make_HTTPS_handler(opts)
  
  class ExtractorError(Exception):
      """Error during info extraction."""
 -    def __init__(self, msg, tb=None, expected=False):
 +    def __init__(self, msg, tb=None, expected=False, cause=None):
          """ tb, if given, is the original traceback (so that it can be printed out).
          If expected is set, this is a normal error message and most likely not a bug in youtube-dl.
          """
          if sys.exc_info()[0] in (compat_urllib_error.URLError, socket.timeout, UnavailableVideoError):
              expected = True
          if not expected:
 -            msg = msg + u'; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output.'
 +            msg = msg + u'; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type  youtube-dl -U  to update.'
          super(ExtractorError, self).__init__(msg)
  
          self.traceback = tb
          self.exc_info = sys.exc_info()  # preserve original exception
 +        self.cause = cause
  
      def format_traceback(self):
          if self.traceback is None:
@@@ -629,23 -622,8 +629,23 @@@ class YoutubeDLHandler(compat_urllib_re
          old_resp = resp
          # gzip
          if resp.headers.get('Content-encoding', '') == 'gzip':
 -            gz = gzip.GzipFile(fileobj=io.BytesIO(resp.read()), mode='r')
 -            resp = self.addinfourl_wrapper(gz, old_resp.headers, old_resp.url, old_resp.code)
 +            content = resp.read()
 +            gz = gzip.GzipFile(fileobj=io.BytesIO(content), mode='rb')
 +            try:
 +                uncompressed = io.BytesIO(gz.read())
 +            except IOError as original_ioerror:
 +                # There may be junk add the end of the file
 +                # See http://stackoverflow.com/q/4928560/35070 for details
 +                for i in range(1, 1024):
 +                    try:
 +                        gz = gzip.GzipFile(fileobj=io.BytesIO(content[:-i]), mode='rb')
 +                        uncompressed = io.BytesIO(gz.read())
 +                    except IOError:
 +                        continue
 +                    break
 +                else:
 +                    raise original_ioerror
 +            resp = self.addinfourl_wrapper(uncompressed, old_resp.headers, old_resp.url, old_resp.code)
              resp.msg = old_resp.msg
          # deflate
          if resp.headers.get('Content-encoding', '') == 'deflate':
@@@ -679,9 -657,6 +679,9 @@@ def determine_ext(url, default_ext=u'un
      else:
          return default_ext
  
 +def subtitles_filename(filename, sub_lang, sub_format):
 +    return filename.rsplit('.', 1)[0] + u'.' + sub_lang + u'.' + sub_format
 +
  def date_from_str(date_str):
      """
      Return a datetime object from a string in the format YYYYMMDD or
@@@ -735,11 -710,18 +735,29 @@@ class DateRange(object)
          return '%s - %s' % ( self.start.isoformat(), self.end.isoformat())
  
  
 +def platform_name():
 +    """ Returns the platform name as a compat_str """
 +    res = platform.platform()
 +    if isinstance(res, bytes):
 +        res = res.decode(preferredencoding())
 +
 +    assert isinstance(res, compat_str)
 +    return res
++
++
+ def bytes_to_intlist(bs):
+     if not bs:
+         return []
+     if isinstance(bs[0], int):  # Python 3
+         return list(bs)
+     else:
+         return [ord(c) for c in bs]
++
+ def intlist_to_bytes(xs):
+     if not xs:
+         return b''
+     if isinstance(chr(0), bytes):  # Python 2
+         return ''.join([chr(x) for x in xs])
+     else:
+         return bytes(xs)