|
|
@ -74,9 +74,14 @@ class FragmentFD(FileDownloader): |
|
|
|
return not ctx['live'] and not ctx['tmpfilename'] == '-' |
|
|
|
|
|
|
|
def _read_ytdl_file(self, ctx): |
|
|
|
assert 'ytdl_corrupt' not in ctx |
|
|
|
stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'r') |
|
|
|
ctx['fragment_index'] = json.loads(stream.read())['downloader']['current_fragment']['index'] |
|
|
|
stream.close() |
|
|
|
try: |
|
|
|
ctx['fragment_index'] = json.loads(stream.read())['downloader']['current_fragment']['index'] |
|
|
|
except Exception: |
|
|
|
ctx['ytdl_corrupt'] = True |
|
|
|
finally: |
|
|
|
stream.close() |
|
|
|
|
|
|
|
def _write_ytdl_file(self, ctx): |
|
|
|
frag_index_stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'w') |
|
|
@ -158,11 +163,17 @@ class FragmentFD(FileDownloader): |
|
|
|
if self.__do_ytdl_file(ctx): |
|
|
|
if os.path.isfile(encodeFilename(self.ytdl_filename(ctx['filename']))): |
|
|
|
self._read_ytdl_file(ctx) |
|
|
|
if ctx['fragment_index'] > 0 and resume_len == 0: |
|
|
|
is_corrupt = ctx.get('ytdl_corrupt') is True |
|
|
|
is_inconsistent = ctx['fragment_index'] > 0 and resume_len == 0 |
|
|
|
if is_corrupt or is_inconsistent: |
|
|
|
message = ( |
|
|
|
'.ytdl file is corrupt' if is_corrupt else |
|
|
|
'Inconsistent state of incomplete fragment download') |
|
|
|
self.report_warning( |
|
|
|
'Inconsistent state of incomplete fragment download. ' |
|
|
|
'Restarting from the beginning...') |
|
|
|
'%s. Restarting from the beginning...' % message) |
|
|
|
ctx['fragment_index'] = resume_len = 0 |
|
|
|
if 'ytdl_corrupt' in ctx: |
|
|
|
del ctx['ytdl_corrupt'] |
|
|
|
self._write_ytdl_file(ctx) |
|
|
|
else: |
|
|
|
self._write_ytdl_file(ctx) |
|
|
|