[YoutubeDL] Check download targets
This commit is contained in:
parent
3799177bdb
commit
7c640d273c
@ -48,6 +48,7 @@ from .utils import (
|
|||||||
determine_ext,
|
determine_ext,
|
||||||
determine_protocol,
|
determine_protocol,
|
||||||
DownloadError,
|
DownloadError,
|
||||||
|
DownloadTarget,
|
||||||
encode_compat_str,
|
encode_compat_str,
|
||||||
encodeFilename,
|
encodeFilename,
|
||||||
error_to_compat_str,
|
error_to_compat_str,
|
||||||
@ -1462,6 +1463,7 @@ class YoutubeDL(object):
|
|||||||
self._num_downloads += 1
|
self._num_downloads += 1
|
||||||
|
|
||||||
info_dict['_filename'] = filename = self.prepare_filename(info_dict)
|
info_dict['_filename'] = filename = self.prepare_filename(info_dict)
|
||||||
|
info_dict['_downloaded_targets'] = []
|
||||||
|
|
||||||
# Forced printings
|
# Forced printings
|
||||||
if self.params.get('forcetitle', False):
|
if self.params.get('forcetitle', False):
|
||||||
@ -1541,6 +1543,9 @@ class YoutubeDL(object):
|
|||||||
# that way it will silently go on when used with unsupporting IE
|
# that way it will silently go on when used with unsupporting IE
|
||||||
subtitles = info_dict['requested_subtitles']
|
subtitles = info_dict['requested_subtitles']
|
||||||
ie = self.get_info_extractor(info_dict['extractor_key'])
|
ie = self.get_info_extractor(info_dict['extractor_key'])
|
||||||
|
|
||||||
|
all_subtitles_ok = True
|
||||||
|
|
||||||
for sub_lang, sub_info in subtitles.items():
|
for sub_lang, sub_info in subtitles.items():
|
||||||
sub_format = sub_info['ext']
|
sub_format = sub_info['ext']
|
||||||
if sub_info.get('data') is not None:
|
if sub_info.get('data') is not None:
|
||||||
@ -1552,6 +1557,7 @@ class YoutubeDL(object):
|
|||||||
except ExtractorError as err:
|
except ExtractorError as err:
|
||||||
self.report_warning('Unable to download subtitle for "%s": %s' %
|
self.report_warning('Unable to download subtitle for "%s": %s' %
|
||||||
(sub_lang, error_to_compat_str(err.cause)))
|
(sub_lang, error_to_compat_str(err.cause)))
|
||||||
|
all_subtitles_ok = False
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
sub_filename = subtitles_filename(filename, sub_lang, sub_format)
|
sub_filename = subtitles_filename(filename, sub_lang, sub_format)
|
||||||
@ -1563,8 +1569,12 @@ class YoutubeDL(object):
|
|||||||
subfile.write(sub_data)
|
subfile.write(sub_data)
|
||||||
except (OSError, IOError):
|
except (OSError, IOError):
|
||||||
self.report_error('Cannot write subtitles file ' + sub_filename)
|
self.report_error('Cannot write subtitles file ' + sub_filename)
|
||||||
|
all_subtitles_ok = False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if all_subtitles_ok:
|
||||||
|
info_dict['_downloaded_targets'].append(DownloadTarget.SUBTITLES)
|
||||||
|
|
||||||
if self.params.get('writeinfojson', False):
|
if self.params.get('writeinfojson', False):
|
||||||
infofn = replace_extension(filename, 'info.json', info_dict.get('ext'))
|
infofn = replace_extension(filename, 'info.json', info_dict.get('ext'))
|
||||||
if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(infofn)):
|
if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(infofn)):
|
||||||
@ -1577,7 +1587,8 @@ class YoutubeDL(object):
|
|||||||
self.report_error('Cannot write metadata to JSON file ' + infofn)
|
self.report_error('Cannot write metadata to JSON file ' + infofn)
|
||||||
return
|
return
|
||||||
|
|
||||||
self._write_thumbnails(info_dict, filename)
|
if self._write_thumbnails(info_dict, filename):
|
||||||
|
info_dict['_downloaded_targets'].append(DownloadTarget.THUMBNAILS)
|
||||||
|
|
||||||
if not self.params.get('skip_download', False):
|
if not self.params.get('skip_download', False):
|
||||||
try:
|
try:
|
||||||
@ -1718,12 +1729,16 @@ class YoutubeDL(object):
|
|||||||
else:
|
else:
|
||||||
assert fixup_policy in ('ignore', 'never')
|
assert fixup_policy in ('ignore', 'never')
|
||||||
|
|
||||||
try:
|
info_dict['_downloaded_targets'].append(DownloadTarget.MEDIA)
|
||||||
self.post_process(filename, info_dict)
|
|
||||||
except (PostProcessingError) as err:
|
try:
|
||||||
self.report_error('postprocessing: %s' % str(err))
|
self.post_process(filename, info_dict)
|
||||||
return
|
except (PostProcessingError) as err:
|
||||||
self.record_download_archive(info_dict)
|
self.report_error('postprocessing: %s' % str(err))
|
||||||
|
return
|
||||||
|
|
||||||
|
if DownloadTarget.MEDIA in info_dict['_downloaded_targets']:
|
||||||
|
self.record_download_archive(info_dict)
|
||||||
|
|
||||||
def download(self, url_list):
|
def download(self, url_list):
|
||||||
"""Download a given list of URLs."""
|
"""Download a given list of URLs."""
|
||||||
@ -1776,11 +1791,15 @@ class YoutubeDL(object):
|
|||||||
"""Run all the postprocessors on the given file."""
|
"""Run all the postprocessors on the given file."""
|
||||||
info = dict(ie_info)
|
info = dict(ie_info)
|
||||||
info['filepath'] = filename
|
info['filepath'] = filename
|
||||||
|
downloaded_targets = set(ie_info['_downloaded_targets'])
|
||||||
|
|
||||||
pps_chain = []
|
pps_chain = []
|
||||||
if ie_info.get('__postprocessors') is not None:
|
if ie_info.get('__postprocessors') is not None:
|
||||||
pps_chain.extend(ie_info['__postprocessors'])
|
pps_chain.extend(ie_info['__postprocessors'])
|
||||||
pps_chain.extend(self._pps)
|
pps_chain.extend(self._pps)
|
||||||
for pp in pps_chain:
|
for pp in pps_chain:
|
||||||
|
if not pp.DEPENDENCY.issubset(downloaded_targets):
|
||||||
|
continue
|
||||||
files_to_delete = []
|
files_to_delete = []
|
||||||
try:
|
try:
|
||||||
files_to_delete, info = pp.run(info)
|
files_to_delete, info = pp.run(info)
|
||||||
@ -2093,11 +2112,13 @@ class YoutubeDL(object):
|
|||||||
elif self.params.get('write_all_thumbnails', False):
|
elif self.params.get('write_all_thumbnails', False):
|
||||||
thumbnails = info_dict.get('thumbnails')
|
thumbnails = info_dict.get('thumbnails')
|
||||||
else:
|
else:
|
||||||
return
|
return False
|
||||||
|
|
||||||
if not thumbnails:
|
if not thumbnails:
|
||||||
# No thumbnails present, so return immediately
|
# No thumbnails present, so return immediately
|
||||||
return
|
return False
|
||||||
|
|
||||||
|
all_thumbnails_ok = True
|
||||||
|
|
||||||
for t in thumbnails:
|
for t in thumbnails:
|
||||||
thumb_ext = determine_ext(t['url'], 'jpg')
|
thumb_ext = determine_ext(t['url'], 'jpg')
|
||||||
@ -2120,3 +2141,6 @@ class YoutubeDL(object):
|
|||||||
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
|
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
|
||||||
self.report_warning('Unable to download thumbnail "%s": %s' %
|
self.report_warning('Unable to download thumbnail "%s": %s' %
|
||||||
(t['url'], error_to_compat_str(err)))
|
(t['url'], error_to_compat_str(err)))
|
||||||
|
all_thumbnails_ok = False
|
||||||
|
|
||||||
|
return all_thumbnails_ok
|
||||||
|
Loading…
x
Reference in New Issue
Block a user