[YoutubeDL] Fallback to ie_key of matching extractor while making download archive...
authorSergey M․ <dstftw@gmail.com>
Fri, 1 Feb 2019 22:44:31 +0000 (05:44 +0700)
committerSergey M․ <dstftw@gmail.com>
Fri, 1 Feb 2019 22:44:31 +0000 (05:44 +0700)
youtube_dl/YoutubeDL.py

index 80ed8d7e59c3d9f5e993e9f4fafe20768afc3711..c168415ce5184e85170244b8cb0c4e3c4503727f 100755 (executable)
@@ -2060,15 +2060,21 @@ class YoutubeDL(object):
                         self.report_warning('Unable to remove downloaded original file')
 
     def _make_archive_id(self, info_dict):
+        video_id = info_dict.get('id')
+        if not video_id:
+            return
         # Future-proof against any change in case
         # and backwards compatibility with prior versions
-        extractor = info_dict.get('extractor_key')
-        if extractor is None:
-            if 'id' in info_dict:
-                extractor = info_dict.get('ie_key')  # key in a playlist
+        extractor = info_dict.get('extractor_key') or info_dict.get('ie_key')  # key in a playlist
         if extractor is None:
-            return None  # Incomplete video information
-        return extractor.lower() + ' ' + info_dict['id']
+            # Try to find matching extractor for the URL and take its ie_key
+            for ie in self._ies:
+                if ie.suitable(info_dict['url']):
+                    extractor = ie.ie_key()
+                    break
+            else:
+                return
+        return extractor.lower() + ' ' + video_id
 
     def in_download_archive(self, info_dict):
         fn = self.params.get('download_archive')
@@ -2076,7 +2082,7 @@ class YoutubeDL(object):
             return False
 
         vid_id = self._make_archive_id(info_dict)
-        if vid_id is None:
+        if not vid_id:
             return False  # Incomplete video information
 
         try: