From 0c9df79e170dc4e465271691d56ea155eff7cfb3 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 29 Sep 2020 05:11:32 +0200 Subject: [PATCH] [core] no sleep affected subtitles only with enforced flag --- youtube_dlc/YoutubeDL.py | 15 ++++++++++----- youtube_dlc/__init__.py | 1 + youtube_dlc/options.py | 4 ++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/youtube_dlc/YoutubeDL.py b/youtube_dlc/YoutubeDL.py index c7e3eb01ef..0bb5ff1e98 100644 --- a/youtube_dlc/YoutubeDL.py +++ b/youtube_dlc/YoutubeDL.py @@ -1856,12 +1856,14 @@ def dl(name, info): # subtitles download errors are already managed as troubles in relevant IE # that way it will silently go on when used with unsupporting IE subtitles = info_dict['requested_subtitles'] + ie = self.get_info_extractor(info_dict['extractor_key']) for sub_lang, sub_info in subtitles.items(): sub_format = sub_info['ext'] sub_filename = subtitles_filename(filename, sub_lang, sub_format, info_dict.get('ext')) if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(sub_filename)): self.to_screen('[info] Video subtitle %s.%s is already present' % (sub_lang, sub_format)) else: + self.to_screen('[info] Writing video subtitles to: ' + sub_filename) if sub_info.get('data') is not None: try: # Use newline='' to prevent conversion of newline characters @@ -1873,11 +1875,14 @@ def dl(name, info): return else: try: - dl(sub_filename, sub_info) - except (ExtractorError, IOError, OSError, ValueError, - compat_urllib_error.URLError, - compat_http_client.HTTPException, - socket.error) as err: + if self.params.get('sleep_interval_subtitles', False): + dl(sub_filename, sub_info) + else: + sub_data = ie._request_webpage( + sub_info['url'], info_dict['id'], note=False).read() + with io.open(encodeFilename(sub_filename), 'wb') as subfile: + subfile.write(sub_data) + except (ExtractorError, IOError, OSError, ValueError, compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: self.report_warning('Unable to download subtitle for "%s": %s' % (sub_lang, error_to_compat_str(err))) continue diff --git a/youtube_dlc/__init__.py b/youtube_dlc/__init__.py index f944cd70f5..3057f977fd 100644 --- a/youtube_dlc/__init__.py +++ b/youtube_dlc/__init__.py @@ -427,6 +427,7 @@ def parse_retries(retries): 'call_home': opts.call_home, 'sleep_interval': opts.sleep_interval, 'max_sleep_interval': opts.max_sleep_interval, + 'sleep_interval_subtitles': opts.sleep_interval_subtitles, 'external_downloader': opts.external_downloader, 'list_thumbnails': opts.list_thumbnails, 'playlist_items': opts.playlist_items, diff --git a/youtube_dlc/options.py b/youtube_dlc/options.py index e6873c703f..e0651b7ba7 100644 --- a/youtube_dlc/options.py +++ b/youtube_dlc/options.py @@ -580,6 +580,10 @@ def _comma_separated_values_options_callback(option, opt_str, value, parser): 'Upper bound of a range for randomized sleep before each download ' '(maximum possible number of seconds to sleep). Must only be used ' 'along with --min-sleep-interval.')) + workarounds.add_option( + '--sleep-subtitles', + dest='sleep_interval_subtitles', action='store_true', default=False, + help='Enforce sleep interval on subtitles as well') verbosity = optparse.OptionGroup(parser, 'Verbosity / Simulation Options') verbosity.add_option(