docs: def run(self):
          '''
          Download the video.
          '''
          #Callback
          self._debug('Provider', 'run', 'Running pre-download callback.')
          self._pre_download()
  
          url = None
          out = None
          success = False
  
          try:
              url = Provider._download(self.get_download_url())
  
              #Callback
              self._debug('Provider', 'run', 'Running in-download callback.')
              self._in_download(url)
  
              #Invalid filename character fix
              if IS_WINDOWS:
                  self.filename = re.sub(ur'[?\/\\<>:"*|]+', '_', self.filename, re.UNICODE)
              self.full_filename = '%s.%s' % (self.filename, self.fileext)
              self._debug('Provider', 'run', 'full_filename', self.full_filename)
  
              if not os.path.isfile(self.full_filename):
                  #Save the stream to the output file
                  out = open(self.full_filename, 'wb')
                  out.write(url.read())
              else:
                  #Skipping
                  #TODO: warn
                  pass
  
              #We are done therefore success!
              success = True
          finally:
              if out is not None:
                  out.close()
              if url is not None:
                  url.close()
  
              #Callback
              self._debug('Provider', 'run', 'Running post-download callback.')
              self._debug('Provider', 'run', 'success', success)
              self._post_download(success)