Merge branch 'master' into subtitles_rework
[youtube-dl] / youtube_dl / YoutubeDL.py
index e69d844b8a6c47188cb3a26cbdb63b004c770828..fa7bb1387b4d349ccbac9db806ea1431fa42f71f 100644 (file)
@@ -221,19 +221,16 @@ class YoutubeDL(object):
 
     def report_writesubtitles(self, sub_filename):
         """ Report that the subtitles file is being written """
-        self.to_screen(u'[info] Writing video subtitles to: ' + sub_filename)
+        self.to_screen(u'[info] Writing subtitle: ' + sub_filename)
+
+    def report_existingsubtitles(self, sub_filename):
+        """ Report that the subtitles file has been already written """
+        self.to_screen(u'[info] Skipping existing subtitle: ' + sub_filename)
 
     def report_writeinfojson(self, infofn):
         """ Report that the metadata file has been written """
         self.to_screen(u'[info] Video description metadata as JSON to: ' + infofn)
 
-    def report_file_already_downloaded(self, file_name):
-        """Report file has already been fully downloaded."""
-        try:
-            self.to_screen(u'[download] %s has already been downloaded' % file_name)
-        except (UnicodeEncodeError) as err:
-            self.to_screen(u'[download] The file has already been downloaded')
-
     def increment_downloads(self):
         """Increment the ordinal that assigns a number to each file."""
         self._num_downloads += 1
@@ -264,7 +261,7 @@ class YoutubeDL(object):
             self.report_error(u'Erroneous output template')
             return None
         except ValueError as err:
-            self.report_error(u'Insufficient system charset ' + repr(preferredencoding()))
+            self.report_error(u'Error in output template: ' + str(err) + u' (encoding: ' + repr(preferredencoding()) + ')')
             return None
 
     def _match_entry(self, info_dict):
@@ -492,12 +489,16 @@ class YoutubeDL(object):
             # that way it will silently go on when used with unsupporting IE
             subtitles = info_dict['subtitles']
             sub_format = self.params.get('subtitlesformat')
+
             for sub_lang in subtitles.keys():
                 sub = subtitles[sub_lang]
                 if sub is None:
                     continue
                 try:
                     sub_filename = filename.rsplit('.', 1)[0] + u'.' + sub_lang + u'.' + sub_format
+                    if os.path.isfile(encodeFilename(sub_filename)):
+                        self.report_existingsubtitles(sub_filename)
+                        continue
                     self.report_writesubtitles(sub_filename)
                     with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8') as subfile:
                             subfile.write(sub)
@@ -534,7 +535,7 @@ class YoutubeDL(object):
                 try:
                     success = self.fd._do_download(filename, info_dict)
                 except (OSError, IOError) as err:
-                    raise UnavailableVideoError()
+                    raise UnavailableVideoError(err)
                 except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
                     self.report_error(u'unable to download video data: %s' % str(err))
                     return
@@ -581,7 +582,7 @@ class YoutubeDL(object):
                         # No clear decision yet, let IE decide
                         keep_video = keep_video_wish
             except PostProcessingError as e:
-                self.to_stderr(u'ERROR: ' + e.msg)
+                self.report_error(e.msg)
         if keep_video is False and not self.params.get('keepvideo', False):
             try:
                 self.to_screen(u'Deleting original file %s (pass -k to keep)' % filename)