|
|
@ -1,4 +1,4 @@ |
|
|
|
from __future__ import unicode_literals |
|
|
|
from __future__ import division, unicode_literals |
|
|
|
|
|
|
|
import os |
|
|
|
import re |
|
|
@ -54,6 +54,7 @@ class FileDownloader(object): |
|
|
|
self.ydl = ydl |
|
|
|
self._progress_hooks = [] |
|
|
|
self.params = params |
|
|
|
self.add_progress_hook(self.report_progress) |
|
|
|
|
|
|
|
@staticmethod |
|
|
|
def format_seconds(seconds): |
|
|
@ -226,42 +227,64 @@ class FileDownloader(object): |
|
|
|
self.to_screen(clear_line + fullmsg, skip_eol=not is_last_line) |
|
|
|
self.to_console_title('youtube-dl ' + msg) |
|
|
|
|
|
|
|
def report_progress(self, percent, data_len_str, speed, eta): |
|
|
|
"""Report download progress.""" |
|
|
|
if self.params.get('noprogress', False): |
|
|
|
def report_progress(self, s): |
|
|
|
if s['status'] == 'finished': |
|
|
|
if self.params.get('noprogress', False): |
|
|
|
self.to_screen('[download] Download completed') |
|
|
|
else: |
|
|
|
s['_total_bytes_str'] = format_bytes(s['total_bytes']) |
|
|
|
if s.get('elapsed') is not None: |
|
|
|
s['_elapsed_str'] = self.format_seconds(s['elapsed']) |
|
|
|
msg_template = '100%% of %(_total_bytes_str)s in %(_elapsed_str)s' |
|
|
|
else: |
|
|
|
msg_template = '100%% of %(_total_bytes_str)s' |
|
|
|
self._report_progress_status( |
|
|
|
msg_template % s, is_last_line=True) |
|
|
|
|
|
|
|
if self.params.get('noprogress'): |
|
|
|
return |
|
|
|
if eta is not None: |
|
|
|
eta_str = self.format_eta(eta) |
|
|
|
else: |
|
|
|
eta_str = 'Unknown ETA' |
|
|
|
if percent is not None: |
|
|
|
percent_str = self.format_percent(percent) |
|
|
|
|
|
|
|
if s['status'] != 'downloading': |
|
|
|
return |
|
|
|
|
|
|
|
if s.get('eta') is not None: |
|
|
|
s['_eta_str'] = self.format_eta(s['eta']) |
|
|
|
else: |
|
|
|
percent_str = 'Unknown %' |
|
|
|
speed_str = self.format_speed(speed) |
|
|
|
s['_eta_str'] = 'Unknown ETA' |
|
|
|
|
|
|
|
msg = ('%s of %s at %s ETA %s' % |
|
|
|
(percent_str, data_len_str, speed_str, eta_str)) |
|
|
|
self._report_progress_status(msg) |
|
|
|
if s.get('total_bytes') and s.get('downloaded_bytes') is not None: |
|
|
|
s['_percent_str'] = self.format_percent(100 * s['downloaded_bytes'] / s['total_bytes']) |
|
|
|
elif s.get('total_bytes_estimate') and s.get('downloaded_bytes') is not None: |
|
|
|
s['_percent_str'] = self.format_percent(100 * s['downloaded_bytes'] / s['total_bytes_estimate']) |
|
|
|
else: |
|
|
|
if s.get('downloaded_bytes') == 0: |
|
|
|
s['_percent_str'] = self.format_percent(0) |
|
|
|
else: |
|
|
|
s['_percent_str'] = 'Unknown %' |
|
|
|
|
|
|
|
def report_progress_live_stream(self, downloaded_data_len, speed, elapsed): |
|
|
|
if self.params.get('noprogress', False): |
|
|
|
return |
|
|
|
downloaded_str = format_bytes(downloaded_data_len) |
|
|
|
speed_str = self.format_speed(speed) |
|
|
|
elapsed_str = FileDownloader.format_seconds(elapsed) |
|
|
|
msg = '%s at %s (%s)' % (downloaded_str, speed_str, elapsed_str) |
|
|
|
self._report_progress_status(msg) |
|
|
|
|
|
|
|
def report_finish(self, data_len_str, tot_time): |
|
|
|
"""Report download finished.""" |
|
|
|
if self.params.get('noprogress', False): |
|
|
|
self.to_screen('[download] Download completed') |
|
|
|
if s.get('speed') is not None: |
|
|
|
s['_speed_str'] = self.format_speed(s['speed']) |
|
|
|
else: |
|
|
|
s['_speed_str'] = 'Unknown speed' |
|
|
|
|
|
|
|
if s.get('total_bytes') is not None: |
|
|
|
s['_total_bytes_str'] = format_bytes(s['total_bytes']) |
|
|
|
msg_template = '%(_percent_str)s of %(_total_bytes_str)s at %(_speed_str)s ETA %(_eta_str)s' |
|
|
|
elif s.get('total_bytes_estimate') is not None: |
|
|
|
s['_total_bytes_estimate_str'] = format_bytes(s['total_bytes_estimate']) |
|
|
|
msg_template = '%(_percent_str)s of ~%(_total_bytes_estimate_str)s at %(_speed_str)s ETA %(_eta_str)s' |
|
|
|
else: |
|
|
|
self._report_progress_status( |
|
|
|
('100%% of %s in %s' % |
|
|
|
(data_len_str, self.format_seconds(tot_time))), |
|
|
|
is_last_line=True) |
|
|
|
if s.get('downloaded_bytes') is not None: |
|
|
|
s['_downloaded_bytes_str'] = format_bytes(s['downloaded_bytes']) |
|
|
|
if s.get('elapsed'): |
|
|
|
s['_elapsed_str'] = self.format_seconds(s['elapsed']) |
|
|
|
msg_template = '%(_downloaded_bytes_str)s at %(_speed_str)s (%(_elapsed_str)s)' |
|
|
|
else: |
|
|
|
msg_template = '%(_downloaded_bytes_str)s at %(_speed_str)s' |
|
|
|
else: |
|
|
|
msg_template = '%(_percent_str)s % at %(_speed_str)s ETA %(_eta_str)s' |
|
|
|
|
|
|
|
self._report_progress_status(msg_template % s) |
|
|
|
|
|
|
|
def report_resuming_byte(self, resume_len): |
|
|
|
"""Report attempt to resume at given byte.""" |
|
|
|