mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-14 23:32:33 +00:00
[downloader/fragment] Don't process ytdl file when it's not needed yet
This commit is contained in:
parent
0eee52f34b
commit
adb4b03cd5
1 changed files with 23 additions and 13 deletions
|
@ -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']))
|
||||||
|
|
Loading…
Reference in a new issue