diff options
Diffstat (limited to 'youtube_dl/downloader/fragment.py')
| -rw-r--r-- | youtube_dl/downloader/fragment.py | 32 | 
1 files changed, 19 insertions, 13 deletions
| diff --git a/youtube_dl/downloader/fragment.py b/youtube_dl/downloader/fragment.py index 5a64b29ee..0c9113d0f 100644 --- a/youtube_dl/downloader/fragment.py +++ b/youtube_dl/downloader/fragment.py @@ -59,37 +59,43 @@ class FragmentFD(FileDownloader):              'filename': ctx['filename'],              'tmpfilename': ctx['tmpfilename'],          } +          start = time.time() -        ctx['started'] = start +        ctx.update({ +            'started': start, +            # Total complete fragments downloaded so far in bytes +            'complete_frags_downloaded_bytes': 0, +            # Amount of fragment's bytes downloaded by the time of the previous +            # frag progress hook invocation +            'prev_frag_downloaded_bytes': 0, +        })          def frag_progress_hook(s):              if s['status'] not in ('downloading', 'finished'):                  return -            frag_total_bytes = s.get('total_bytes', 0) -            if s['status'] == 'finished': -                state['downloaded_bytes'] += frag_total_bytes -                state['frag_index'] += 1 +            frag_total_bytes = s.get('total_bytes') or 0              estimated_size = ( -                (state['downloaded_bytes'] + frag_total_bytes) / +                (ctx['complete_frags_downloaded_bytes'] + frag_total_bytes) /                  (state['frag_index'] + 1) * total_frags)              time_now = time.time()              state['total_bytes_estimate'] = estimated_size              state['elapsed'] = time_now - start              if s['status'] == 'finished': -                progress = self.calc_percent(state['frag_index'], total_frags) +                state['frag_index'] += 1 +                state['downloaded_bytes'] += frag_total_bytes - ctx['prev_frag_downloaded_bytes'] +                ctx['complete_frags_downloaded_bytes'] = state['downloaded_bytes'] +                ctx['prev_frag_downloaded_bytes'] = 0              else:                  frag_downloaded_bytes = s['downloaded_bytes'] -                frag_progress = self.calc_percent(frag_downloaded_bytes, -                                                  frag_total_bytes) -                progress = self.calc_percent(state['frag_index'], total_frags) -                progress += frag_progress / float(total_frags) - +                state['downloaded_bytes'] += frag_downloaded_bytes - ctx['prev_frag_downloaded_bytes']                  state['eta'] = self.calc_eta( -                    start, time_now, estimated_size, state['downloaded_bytes'] + frag_downloaded_bytes) +                    start, time_now, estimated_size, +                    state['downloaded_bytes'])                  state['speed'] = s.get('speed') +                ctx['prev_frag_downloaded_bytes'] = frag_downloaded_bytes              self._hook_progress(state)          ctx['dl'].add_progress_hook(frag_progress_hook) | 
