[downloader/fragment] use a general file to store fragment download context
This commit is contained in:
parent
481ef51e23
commit
ea0c2f219c
2 changed files with 15 additions and 7 deletions
|
@ -187,6 +187,9 @@ class FileDownloader(object):
|
||||||
return filename[:-len('.part')]
|
return filename[:-len('.part')]
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
def ytdl_filename(self, filename):
|
||||||
|
return filename + '.ytdl'
|
||||||
|
|
||||||
def try_rename(self, old_filename, new_filename):
|
def try_rename(self, old_filename, new_filename):
|
||||||
try:
|
try:
|
||||||
if old_filename == new_filename:
|
if old_filename == new_filename:
|
||||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import division, unicode_literals
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import io
|
import io
|
||||||
|
import json
|
||||||
|
|
||||||
from .common import FileDownloader
|
from .common import FileDownloader
|
||||||
from .http import HttpFD
|
from .http import HttpFD
|
||||||
|
@ -63,8 +64,10 @@ class FragmentFD(FileDownloader):
|
||||||
def _append_fragment(self, ctx, frag_content):
|
def _append_fragment(self, ctx, frag_content):
|
||||||
ctx['dest_stream'].write(frag_content)
|
ctx['dest_stream'].write(frag_content)
|
||||||
if not (ctx.get('live') or ctx['tmpfilename'] == '-'):
|
if not (ctx.get('live') or ctx['tmpfilename'] == '-'):
|
||||||
frag_index_stream, _ = sanitize_open(ctx['tmpfilename'] + '.fragindex', 'w')
|
frag_index_stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'w')
|
||||||
frag_index_stream.write(compat_str(ctx['frag_index']))
|
frag_index_stream.write(json.dumps({
|
||||||
|
'frag_index': ctx['frag_index']
|
||||||
|
}))
|
||||||
frag_index_stream.close()
|
frag_index_stream.close()
|
||||||
|
|
||||||
def _prepare_frag_download(self, ctx):
|
def _prepare_frag_download(self, ctx):
|
||||||
|
@ -94,9 +97,10 @@ class FragmentFD(FileDownloader):
|
||||||
if os.path.isfile(encodeFilename(tmpfilename)):
|
if os.path.isfile(encodeFilename(tmpfilename)):
|
||||||
open_mode = 'ab'
|
open_mode = 'ab'
|
||||||
resume_len = os.path.getsize(encodeFilename(tmpfilename))
|
resume_len = os.path.getsize(encodeFilename(tmpfilename))
|
||||||
if os.path.isfile(encodeFilename(tmpfilename + '.fragindex')):
|
ytdl_filename = encodeFilename(self.ytdl_filename(ctx['filename']))
|
||||||
frag_index_stream, _ = sanitize_open(tmpfilename + '.fragindex', 'r')
|
if os.path.isfile(ytdl_filename):
|
||||||
frag_index = int(frag_index_stream.read())
|
frag_index_stream, _ = sanitize_open(ytdl_filename, 'r')
|
||||||
|
frag_index = json.loads(frag_index_stream.read())['frag_index']
|
||||||
frag_index_stream.close()
|
frag_index_stream.close()
|
||||||
dest_stream, tmpfilename = sanitize_open(tmpfilename, open_mode)
|
dest_stream, tmpfilename = sanitize_open(tmpfilename, open_mode)
|
||||||
|
|
||||||
|
@ -167,8 +171,9 @@ class FragmentFD(FileDownloader):
|
||||||
|
|
||||||
def _finish_frag_download(self, ctx):
|
def _finish_frag_download(self, ctx):
|
||||||
ctx['dest_stream'].close()
|
ctx['dest_stream'].close()
|
||||||
if os.path.isfile(encodeFilename(ctx['tmpfilename'] + '.fragindex')):
|
ytdl_filename = encodeFilename(self.ytdl_filename(ctx['filename']))
|
||||||
os.remove(encodeFilename(ctx['tmpfilename'] + '.fragindex'))
|
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