[downloader/external] Fix download finalization when writing file to stdout (closes #10809)

An OSError or IOError generally indicates something a little more
wrong than a "simple" UnavailableVideoError, so print the actual
traceback that leads to the exception. Otherwise meaningful postmortem
debugging a bug report is essentially infeasible.
This commit is contained in:
John Hawkinson 2016-10-08 09:27:24 -04:00 committed by Sergey M․
parent 0ff2c1ecb6
commit 80aa246094
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D
2 changed files with 21 additions and 13 deletions

View File

@ -249,12 +249,14 @@ def report_progress(self, s):
if self.params.get('noprogress', False): if self.params.get('noprogress', False):
self.to_screen('[download] Download completed') self.to_screen('[download] Download completed')
else: else:
if s.get('total_bytes') is not None:
s['_total_bytes_str'] = format_bytes(s['total_bytes']) s['_total_bytes_str'] = format_bytes(s['total_bytes'])
msg_template = '100%% of %(_total_bytes_str)s'
else:
msg_template = 'Completed'
if s.get('elapsed') is not None: if s.get('elapsed') is not None:
s['_elapsed_str'] = self.format_seconds(s['elapsed']) s['_elapsed_str'] = self.format_seconds(s['elapsed'])
msg_template = '100%% of %(_total_bytes_str)s in %(_elapsed_str)s' msg_template += ' in %(_elapsed_str)s'
else:
msg_template = '100%% of %(_total_bytes_str)s'
self._report_progress_status( self._report_progress_status(
msg_template % s, is_last_line=True) msg_template % s, is_last_line=True)

View File

@ -41,6 +41,12 @@ def real_download(self, filename, info_dict):
self.to_screen('[%s] Interrupted by user' % self.get_basename()) self.to_screen('[%s] Interrupted by user' % self.get_basename())
if retval == 0: if retval == 0:
if filename == '-':
self._hook_progress({
'filename': filename,
'status': 'finished',
})
else:
fsize = os.path.getsize(encodeFilename(tmpfilename)) fsize = os.path.getsize(encodeFilename(tmpfilename))
self.to_screen('\r[%s] Downloaded %s bytes' % (self.get_basename(), fsize)) self.to_screen('\r[%s] Downloaded %s bytes' % (self.get_basename(), fsize))
self.try_rename(tmpfilename, filename) self.try_rename(tmpfilename, filename)