[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

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,16 +119,21 @@ 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
if os.path.isfile(encodeFilename(self.ytdl_filename(ctx['filename']))): ctx.update({
self._read_ytdl_file(ctx) 'tmpfilename': tmpfilename,
else: 'fragment_index': 0,
self._write_ytdl_file(ctx) })
if ctx['fragment_index'] > 0: if self.__do_ytdl_file(ctx):
assert resume_len > 0 if os.path.isfile(encodeFilename(self.ytdl_filename(ctx['filename']))):
else: self._read_ytdl_file(ctx)
assert resume_len == 0 else:
self._write_ytdl_file(ctx)
if ctx['fragment_index'] > 0:
assert resume_len > 0
else:
assert resume_len == 0
dest_stream, tmpfilename = sanitize_open(tmpfilename, open_mode) dest_stream, tmpfilename = sanitize_open(tmpfilename, open_mode)
@ -194,9 +203,10 @@ class FragmentFD(FileDownloader):
def _finish_frag_download(self, ctx): def _finish_frag_download(self, ctx):
ctx['dest_stream'].close() ctx['dest_stream'].close()
ytdl_filename = encodeFilename(self.ytdl_filename(ctx['filename'])) if self.__do_ytdl_file(ctx):
if os.path.isfile(ytdl_filename): ytdl_filename = encodeFilename(self.ytdl_filename(ctx['filename']))
os.remove(ytdl_filename) if os.path.isfile(ytdl_filename):
os.remove(ytdl_filename)
elapsed = time.time() - ctx['started'] elapsed = time.time() - ctx['started']
self.try_rename(ctx['tmpfilename'], ctx['filename']) self.try_rename(ctx['tmpfilename'], ctx['filename'])
fsize = os.path.getsize(encodeFilename(ctx['filename'])) fsize = os.path.getsize(encodeFilename(ctx['filename']))