1
0
mirror of https://github.com/l1ving/youtube-dl synced 2024-12-30 22:22:58 +08:00

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