[downloader/fragment] Don't process ytdl file when it's not needed yet

This commit is contained in:
Sergey M․ 2017-04-24 23:05:56 +07:00
parent 0eee52f34b
commit adb4b03cd5
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D
1 changed files with 23 additions and 13 deletions

View File

@ -49,6 +49,10 @@ class FragmentFD(FileDownloader):
self._prepare_frag_download(ctx) self._prepare_frag_download(ctx)
self._start_frag_download(ctx) self._start_frag_download(ctx)
@staticmethod
def __do_ytdl_file(ctx):
return not ctx['live'] and not ctx['tmpfilename'] == '-'
def _read_ytdl_file(self, ctx): def _read_ytdl_file(self, ctx):
stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'r') stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'r')
ctx['fragment_index'] = json.loads(stream.read())['download']['current_fragment_index'] ctx['fragment_index'] = json.loads(stream.read())['download']['current_fragment_index']
@ -81,7 +85,7 @@ class FragmentFD(FileDownloader):
try: try:
ctx['dest_stream'].write(frag_content) ctx['dest_stream'].write(frag_content)
finally: finally:
if not (ctx.get('live') or ctx['tmpfilename'] == '-'): if self.__do_ytdl_file(ctx):
self._write_ytdl_file(ctx) self._write_ytdl_file(ctx)
if not self.params.get('keep_fragments', False): if not self.params.get('keep_fragments', False):
os.remove(ctx['fragment_filename_sanitized']) os.remove(ctx['fragment_filename_sanitized'])
@ -115,12 +119,17 @@ class FragmentFD(FileDownloader):
open_mode = 'ab' open_mode = 'ab'
resume_len = os.path.getsize(encodeFilename(tmpfilename)) resume_len = os.path.getsize(encodeFilename(tmpfilename))
ctx['fragment_index'] = 0 # Should be initialized before ytdl file check
ctx.update({
'tmpfilename': tmpfilename,
'fragment_index': 0,
})
if self.__do_ytdl_file(ctx):
if os.path.isfile(encodeFilename(self.ytdl_filename(ctx['filename']))): if os.path.isfile(encodeFilename(self.ytdl_filename(ctx['filename']))):
self._read_ytdl_file(ctx) self._read_ytdl_file(ctx)
else: else:
self._write_ytdl_file(ctx) self._write_ytdl_file(ctx)
if ctx['fragment_index'] > 0: if ctx['fragment_index'] > 0:
assert resume_len > 0 assert resume_len > 0
else: else:
@ -194,6 +203,7 @@ class FragmentFD(FileDownloader):
def _finish_frag_download(self, ctx): def _finish_frag_download(self, ctx):
ctx['dest_stream'].close() ctx['dest_stream'].close()
if self.__do_ytdl_file(ctx):
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):
os.remove(ytdl_filename) os.remove(ytdl_filename)