- results = []
- for result in ie_results or []:
- result_type = result.get('_type', 'video') #If not given we suppose it's a video, support the dafault old system
- if result_type == 'video':
- if not 'extractor' in result:
- #The extractor has already been set somewhere else
- result['extractor'] = ie.IE_NAME
- results.append(result)
- elif result_type == 'url':
- #We get the videos pointed by the url
- results.extend(self.extract_info(result['url']))
- elif result_type == 'playlist':
- #We process each entry in the playlist
- entries_result = self.process_ie_results(result['entries'], ie)
- results.extend(entries_result)
- return results
+ result_type = ie_result.get('_type', 'video') #If not given we suppose it's a video, support the dafault old system
+ if result_type == 'video':
+ if 'playlist' not in ie_result:
+ #It isn't part of a playlist
+ ie_result['playlist'] = None
+ ie_result['playlist_index'] = None
+ if download:
+ #Do the download:
+ self.process_info(ie_result)
+ return ie_result
+ elif result_type == 'url':
+ #We get the video pointed by the url
+ result = self.extract_info(ie_result['url'], download, ie_name = ie_result['ie_key'])[0]
+ return result
+ elif result_type == 'playlist':
+ #We process each entry in the playlist
+ playlist = ie_result.get('title', None) or ie_result.get('id', None)
+ self.to_screen(u'[download] Downloading playlist: %s' % playlist)
+
+ playlist_results = []
+
+ n_all_entries = len(ie_result['entries'])
+ playliststart = self.params.get('playliststart', 1) - 1
+ playlistend = self.params.get('playlistend', -1)
+
+ if playlistend == -1:
+ entries = ie_result['entries'][playliststart:]
+ else:
+ entries = ie_result['entries'][playliststart:playlistend]
+
+ n_entries = len(entries)
+
+ self.to_screen(u"[%s] playlist '%s': Collected %d video ids (downloading %d of them)" %
+ (ie_result['extractor'], playlist, n_all_entries, n_entries))
+
+ for i,entry in enumerate(entries,1):
+ self.to_screen(u'[download] Downloading video #%s of %s' %(i, n_entries))
+ entry_result = self.process_ie_result(entry, False)
+ entry_result['playlist'] = playlist
+ entry_result['playlist_index'] = i + playliststart
+ #We must do the download here to correctly set the 'playlist' key
+ if download:
+ self.process_info(entry_result)
+ playlist_results.append(entry_result)
+ result = ie_result.copy()
+ result['entries'] = playlist_results
+ return result