mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	| @@ -21,10 +21,12 @@ from ..utils import ( | ||||
|     error_to_compat_str, | ||||
|     float_or_none, | ||||
|     format_bytes, | ||||
|     join_nonempty, | ||||
|     sanitize_open, | ||||
|     shell_quote, | ||||
|     timeconvert, | ||||
|     timetuple_from_msec, | ||||
|     try_call, | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| @@ -110,6 +112,8 @@ class FileDownloader: | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def format_seconds(seconds): | ||||
|         if seconds is None: | ||||
|             return ' Unknown' | ||||
|         time = timetuple_from_msec(seconds * 1000) | ||||
|         if time.hours > 99: | ||||
|             return '--:--:--' | ||||
| @@ -117,6 +121,8 @@ class FileDownloader: | ||||
|             return '%02d:%02d' % time[1:-1] | ||||
|         return '%02d:%02d:%02d' % time[:-1] | ||||
| 
 | ||||
|     format_eta = format_seconds | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def calc_percent(byte_counter, data_len): | ||||
|         if data_len is None: | ||||
| @@ -125,11 +131,7 @@ class FileDownloader: | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def format_percent(percent): | ||||
|         if percent is None: | ||||
|             return '---.-%' | ||||
|         elif percent == 100: | ||||
|             return '100%' | ||||
|         return '%6s' % ('%3.1f%%' % percent) | ||||
|         return '  N/A%' if percent is None else f'{percent:>5.1f}%' | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def calc_eta(start, now, total, current): | ||||
| @@ -143,12 +145,6 @@ class FileDownloader: | ||||
|         rate = float(current) / dif | ||||
|         return int((float(total) - float(current)) / rate) | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def format_eta(eta): | ||||
|         if eta is None: | ||||
|             return '--:--' | ||||
|         return FileDownloader.format_seconds(eta) | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def calc_speed(start, now, bytes): | ||||
|         dif = now - start | ||||
| @@ -158,13 +154,11 @@ class FileDownloader: | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def format_speed(speed): | ||||
|         if speed is None: | ||||
|             return '%10s' % '---b/s' | ||||
|         return '%10s' % ('%s/s' % format_bytes(speed)) | ||||
|         return ' Unknown B/s' if speed is None else f'{format_bytes(speed):>10s}/s' | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def format_retries(retries): | ||||
|         return 'inf' if retries == float('inf') else '%.0f' % retries | ||||
|         return 'inf' if retries == float('inf') else int(retries) | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def best_block_size(elapsed_time, bytes): | ||||
| @@ -332,63 +326,52 @@ class FileDownloader: | ||||
|             self._multiline.stream, self._multiline.allow_colors, *args, **kwargs) | ||||
| 
 | ||||
|     def report_progress(self, s): | ||||
|         def with_fields(*tups, default=''): | ||||
|             for *fields, tmpl in tups: | ||||
|                 if all(s.get(f) is not None for f in fields): | ||||
|                     return tmpl | ||||
|             return default | ||||
| 
 | ||||
|         if s['status'] == 'finished': | ||||
|             if self.params.get('noprogress'): | ||||
|                 self.to_screen('[download] Download completed') | ||||
|             msg_template = '100%%' | ||||
|             if s.get('total_bytes') is not None: | ||||
|                 s['_total_bytes_str'] = format_bytes(s['total_bytes']) | ||||
|                 msg_template += ' of %(_total_bytes_str)s' | ||||
|             if s.get('elapsed') is not None: | ||||
|                 s['_elapsed_str'] = self.format_seconds(s['elapsed']) | ||||
|                 msg_template += ' in %(_elapsed_str)s' | ||||
|             s['_percent_str'] = self.format_percent(100) | ||||
|             self._report_progress_status(s, msg_template) | ||||
|             return | ||||
|             s.update({ | ||||
|                 '_total_bytes_str': format_bytes(s.get('total_bytes')), | ||||
|                 '_elapsed_str': self.format_seconds(s.get('elapsed')), | ||||
|                 '_percent_str': self.format_percent(100), | ||||
|             }) | ||||
|             self._report_progress_status(s, join_nonempty( | ||||
|                 '100%%', | ||||
|                 with_fields(('total_bytes', 'of %(_total_bytes_str)s')), | ||||
|                 with_fields(('elapsed', 'in %(_elapsed_str)s')), | ||||
|                 delim=' ')) | ||||
| 
 | ||||
|         if s['status'] != 'downloading': | ||||
|             return | ||||
| 
 | ||||
|         if s.get('eta') is not None: | ||||
|             s['_eta_str'] = self.format_eta(s['eta']) | ||||
|         else: | ||||
|             s['_eta_str'] = 'Unknown' | ||||
|         s.update({ | ||||
|             '_eta_str': self.format_eta(s.get('eta')), | ||||
|             '_speed_str': self.format_speed(s.get('speed')), | ||||
|             '_percent_str': self.format_percent(try_call( | ||||
|                 lambda: 100 * s['downloaded_bytes'] / s['total_bytes'], | ||||
|                 lambda: 100 * s['downloaded_bytes'] / s['total_bytes_estimate'], | ||||
|                 lambda: s['downloaded_bytes'] == 0 and 0)), | ||||
|             '_total_bytes_str': format_bytes(s.get('total_bytes')), | ||||
|             '_total_bytes_estimate_str': format_bytes(s.get('total_bytes_estimate')), | ||||
|             '_downloaded_bytes_str': format_bytes(s.get('downloaded_bytes')), | ||||
|             '_elapsed_str': self.format_seconds(s.get('elapsed')), | ||||
|         }) | ||||
| 
 | ||||
|         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 %' | ||||
|         msg_template = with_fields( | ||||
|             ('total_bytes', '%(_percent_str)s of %(_total_bytes_str)s at %(_speed_str)s ETA %(_eta_str)s'), | ||||
|             ('total_bytes_estimate', '%(_percent_str)s of ~%(_total_bytes_estimate_str)s at %(_speed_str)s ETA %(_eta_str)s'), | ||||
|             ('downloaded_bytes', 'elapsed', '%(_downloaded_bytes_str)s at %(_speed_str)s (%(_elapsed_str)s)'), | ||||
|             ('downloaded_bytes', '%(_downloaded_bytes_str)s at %(_speed_str)s'), | ||||
|             default='%(_percent_str)s at %(_speed_str)s ETA %(_eta_str)s') | ||||
| 
 | ||||
|         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: | ||||
|             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' | ||||
|         if s.get('fragment_index') and s.get('fragment_count'): | ||||
|             msg_template += ' (frag %(fragment_index)s/%(fragment_count)s)' | ||||
|         elif s.get('fragment_index'): | ||||
|             msg_template += ' (frag %(fragment_index)s)' | ||||
|         msg_template += with_fields( | ||||
|             ('fragment_index', 'fragment_count', ' (frag %(fragment_index)s/%(fragment_count)s)'), | ||||
|             ('fragment_index', ' (frag %(fragment_index)s)')) | ||||
|         self._report_progress_status(s, msg_template) | ||||
| 
 | ||||
|     def report_resuming_byte(self, resume_len): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan