mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 22:57:08 -05:00 
			
		
		
		
	[downloader/fragment] use a general file to store fragment download context
This commit is contained in:
		@@ -3,6 +3,7 @@ from __future__ import division, unicode_literals
 | 
			
		||||
import os
 | 
			
		||||
import time
 | 
			
		||||
import io
 | 
			
		||||
import json
 | 
			
		||||
 | 
			
		||||
from .common import FileDownloader
 | 
			
		||||
from .http import HttpFD
 | 
			
		||||
@@ -63,8 +64,10 @@ class FragmentFD(FileDownloader):
 | 
			
		||||
    def _append_fragment(self, ctx, frag_content):
 | 
			
		||||
        ctx['dest_stream'].write(frag_content)
 | 
			
		||||
        if not (ctx.get('live') or ctx['tmpfilename'] == '-'):
 | 
			
		||||
            frag_index_stream, _ = sanitize_open(ctx['tmpfilename'] + '.fragindex', 'w')
 | 
			
		||||
            frag_index_stream.write(compat_str(ctx['frag_index']))
 | 
			
		||||
            frag_index_stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'w')
 | 
			
		||||
            frag_index_stream.write(json.dumps({
 | 
			
		||||
                'frag_index': ctx['frag_index']
 | 
			
		||||
            }))
 | 
			
		||||
            frag_index_stream.close()
 | 
			
		||||
 | 
			
		||||
    def _prepare_frag_download(self, ctx):
 | 
			
		||||
@@ -94,9 +97,10 @@ class FragmentFD(FileDownloader):
 | 
			
		||||
        if os.path.isfile(encodeFilename(tmpfilename)):
 | 
			
		||||
            open_mode = 'ab'
 | 
			
		||||
            resume_len = os.path.getsize(encodeFilename(tmpfilename))
 | 
			
		||||
            if os.path.isfile(encodeFilename(tmpfilename + '.fragindex')):
 | 
			
		||||
                frag_index_stream, _ = sanitize_open(tmpfilename + '.fragindex', 'r')
 | 
			
		||||
                frag_index = int(frag_index_stream.read())
 | 
			
		||||
            ytdl_filename = encodeFilename(self.ytdl_filename(ctx['filename']))
 | 
			
		||||
            if os.path.isfile(ytdl_filename):
 | 
			
		||||
                frag_index_stream, _ = sanitize_open(ytdl_filename, 'r')
 | 
			
		||||
                frag_index = json.loads(frag_index_stream.read())['frag_index']
 | 
			
		||||
                frag_index_stream.close()
 | 
			
		||||
        dest_stream, tmpfilename = sanitize_open(tmpfilename, open_mode)
 | 
			
		||||
 | 
			
		||||
@@ -167,8 +171,9 @@ class FragmentFD(FileDownloader):
 | 
			
		||||
 | 
			
		||||
    def _finish_frag_download(self, ctx):
 | 
			
		||||
        ctx['dest_stream'].close()
 | 
			
		||||
        if os.path.isfile(encodeFilename(ctx['tmpfilename'] + '.fragindex')):
 | 
			
		||||
            os.remove(encodeFilename(ctx['tmpfilename'] + '.fragindex'))
 | 
			
		||||
        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']))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user