|
|
@ -66,7 +66,9 @@ class FragmentFD(FileDownloader):
|
|
|
|
if not (ctx.get('live') or ctx['tmpfilename'] == '-'):
|
|
|
|
if not (ctx.get('live') or ctx['tmpfilename'] == '-'):
|
|
|
|
frag_index_stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'w')
|
|
|
|
frag_index_stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'w')
|
|
|
|
frag_index_stream.write(json.dumps({
|
|
|
|
frag_index_stream.write(json.dumps({
|
|
|
|
'frag_index': ctx['frag_index']
|
|
|
|
'download': {
|
|
|
|
|
|
|
|
'last_fragment_index': ctx['fragment_index']
|
|
|
|
|
|
|
|
},
|
|
|
|
}))
|
|
|
|
}))
|
|
|
|
frag_index_stream.close()
|
|
|
|
frag_index_stream.close()
|
|
|
|
|
|
|
|
|
|
|
@ -100,7 +102,7 @@ class FragmentFD(FileDownloader):
|
|
|
|
ytdl_filename = encodeFilename(self.ytdl_filename(ctx['filename']))
|
|
|
|
ytdl_filename = encodeFilename(self.ytdl_filename(ctx['filename']))
|
|
|
|
if os.path.isfile(ytdl_filename):
|
|
|
|
if os.path.isfile(ytdl_filename):
|
|
|
|
frag_index_stream, _ = sanitize_open(ytdl_filename, 'r')
|
|
|
|
frag_index_stream, _ = sanitize_open(ytdl_filename, 'r')
|
|
|
|
frag_index = json.loads(frag_index_stream.read())['frag_index']
|
|
|
|
frag_index = json.loads(frag_index_stream.read())['download']['last_fragment_index']
|
|
|
|
frag_index_stream.close()
|
|
|
|
frag_index_stream.close()
|
|
|
|
dest_stream, tmpfilename = sanitize_open(tmpfilename, open_mode)
|
|
|
|
dest_stream, tmpfilename = sanitize_open(tmpfilename, open_mode)
|
|
|
|
|
|
|
|
|
|
|
@ -108,7 +110,7 @@ class FragmentFD(FileDownloader):
|
|
|
|
'dl': dl,
|
|
|
|
'dl': dl,
|
|
|
|
'dest_stream': dest_stream,
|
|
|
|
'dest_stream': dest_stream,
|
|
|
|
'tmpfilename': tmpfilename,
|
|
|
|
'tmpfilename': tmpfilename,
|
|
|
|
'frag_index': frag_index,
|
|
|
|
'fragment_index': frag_index,
|
|
|
|
# Total complete fragments downloaded so far in bytes
|
|
|
|
# Total complete fragments downloaded so far in bytes
|
|
|
|
'complete_frags_downloaded_bytes': resume_len,
|
|
|
|
'complete_frags_downloaded_bytes': resume_len,
|
|
|
|
})
|
|
|
|
})
|
|
|
@ -120,8 +122,8 @@ class FragmentFD(FileDownloader):
|
|
|
|
state = {
|
|
|
|
state = {
|
|
|
|
'status': 'downloading',
|
|
|
|
'status': 'downloading',
|
|
|
|
'downloaded_bytes': ctx['complete_frags_downloaded_bytes'],
|
|
|
|
'downloaded_bytes': ctx['complete_frags_downloaded_bytes'],
|
|
|
|
'frag_index': ctx['frag_index'],
|
|
|
|
'fragment_index': ctx['fragment_index'],
|
|
|
|
'frag_count': total_frags,
|
|
|
|
'fragment_count': total_frags,
|
|
|
|
'filename': ctx['filename'],
|
|
|
|
'filename': ctx['filename'],
|
|
|
|
'tmpfilename': ctx['tmpfilename'],
|
|
|
|
'tmpfilename': ctx['tmpfilename'],
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -144,12 +146,12 @@ class FragmentFD(FileDownloader):
|
|
|
|
if not ctx['live']:
|
|
|
|
if not ctx['live']:
|
|
|
|
estimated_size = (
|
|
|
|
estimated_size = (
|
|
|
|
(ctx['complete_frags_downloaded_bytes'] + frag_total_bytes) /
|
|
|
|
(ctx['complete_frags_downloaded_bytes'] + frag_total_bytes) /
|
|
|
|
(state['frag_index'] + 1) * total_frags)
|
|
|
|
(state['fragment_index'] + 1) * total_frags)
|
|
|
|
state['total_bytes_estimate'] = estimated_size
|
|
|
|
state['total_bytes_estimate'] = estimated_size
|
|
|
|
|
|
|
|
|
|
|
|
if s['status'] == 'finished':
|
|
|
|
if s['status'] == 'finished':
|
|
|
|
state['frag_index'] += 1
|
|
|
|
state['fragment_index'] += 1
|
|
|
|
ctx['frag_index'] = state['frag_index']
|
|
|
|
ctx['fragment_index'] = state['fragment_index']
|
|
|
|
state['downloaded_bytes'] += frag_total_bytes - ctx['prev_frag_downloaded_bytes']
|
|
|
|
state['downloaded_bytes'] += frag_total_bytes - ctx['prev_frag_downloaded_bytes']
|
|
|
|
ctx['complete_frags_downloaded_bytes'] = state['downloaded_bytes']
|
|
|
|
ctx['complete_frags_downloaded_bytes'] = state['downloaded_bytes']
|
|
|
|
ctx['prev_frag_downloaded_bytes'] = 0
|
|
|
|
ctx['prev_frag_downloaded_bytes'] = 0
|
|
|
|