mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 06:27:06 -05:00 
			
		
		
		
	This commit is contained in:
		
				
					committed by
					
						
						Jaime Marquínez Ferrándiz
					
				
			
			
				
	
			
			
			
						parent
						
							f3ff1a3696
						
					
				
				
					commit
					4340decad2
				
			@@ -1121,49 +1121,46 @@ class YoutubeDL(object):
 | 
			
		||||
                                            (info_dict['thumbnail'], compat_str(err)))
 | 
			
		||||
 | 
			
		||||
        if not self.params.get('skip_download', False):
 | 
			
		||||
            if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(filename)):
 | 
			
		||||
                success = True
 | 
			
		||||
            else:
 | 
			
		||||
                try:
 | 
			
		||||
                    def dl(name, info):
 | 
			
		||||
                        fd = get_suitable_downloader(info)(self, self.params)
 | 
			
		||||
                        for ph in self._progress_hooks:
 | 
			
		||||
                            fd.add_progress_hook(ph)
 | 
			
		||||
                        if self.params.get('verbose'):
 | 
			
		||||
                            self.to_stdout('[debug] Invoking downloader on %r' % info.get('url'))
 | 
			
		||||
                        return fd.download(name, info)
 | 
			
		||||
                    if info_dict.get('requested_formats') is not None:
 | 
			
		||||
                        downloaded = []
 | 
			
		||||
                        success = True
 | 
			
		||||
                        merger = FFmpegMergerPP(self, not self.params.get('keepvideo'))
 | 
			
		||||
                        if not merger._executable:
 | 
			
		||||
                            postprocessors = []
 | 
			
		||||
                            self.report_warning('You have requested multiple '
 | 
			
		||||
                                                'formats but ffmpeg or avconv are not installed.'
 | 
			
		||||
                                                ' The formats won\'t be merged')
 | 
			
		||||
                        else:
 | 
			
		||||
                            postprocessors = [merger]
 | 
			
		||||
                        for f in info_dict['requested_formats']:
 | 
			
		||||
                            new_info = dict(info_dict)
 | 
			
		||||
                            new_info.update(f)
 | 
			
		||||
                            fname = self.prepare_filename(new_info)
 | 
			
		||||
                            fname = prepend_extension(fname, 'f%s' % f['format_id'])
 | 
			
		||||
                            downloaded.append(fname)
 | 
			
		||||
                            partial_success = dl(fname, new_info)
 | 
			
		||||
                            success = success and partial_success
 | 
			
		||||
                        info_dict['__postprocessors'] = postprocessors
 | 
			
		||||
                        info_dict['__files_to_merge'] = downloaded
 | 
			
		||||
            try:
 | 
			
		||||
                def dl(name, info):
 | 
			
		||||
                    fd = get_suitable_downloader(info)(self, self.params)
 | 
			
		||||
                    for ph in self._progress_hooks:
 | 
			
		||||
                        fd.add_progress_hook(ph)
 | 
			
		||||
                    if self.params.get('verbose'):
 | 
			
		||||
                        self.to_stdout('[debug] Invoking downloader on %r' % info.get('url'))
 | 
			
		||||
                    return fd.download(name, info)
 | 
			
		||||
                if info_dict.get('requested_formats') is not None:
 | 
			
		||||
                    downloaded = []
 | 
			
		||||
                    success = True
 | 
			
		||||
                    merger = FFmpegMergerPP(self, not self.params.get('keepvideo'))
 | 
			
		||||
                    if not merger._executable:
 | 
			
		||||
                        postprocessors = []
 | 
			
		||||
                        self.report_warning('You have requested multiple '
 | 
			
		||||
                                            'formats but ffmpeg or avconv are not installed.'
 | 
			
		||||
                                            ' The formats won\'t be merged')
 | 
			
		||||
                    else:
 | 
			
		||||
                        # Just a single file
 | 
			
		||||
                        success = dl(filename, info_dict)
 | 
			
		||||
                except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
 | 
			
		||||
                    self.report_error('unable to download video data: %s' % str(err))
 | 
			
		||||
                    return
 | 
			
		||||
                except (OSError, IOError) as err:
 | 
			
		||||
                    raise UnavailableVideoError(err)
 | 
			
		||||
                except (ContentTooShortError, ) as err:
 | 
			
		||||
                    self.report_error('content too short (expected %s bytes and served %s)' % (err.expected, err.downloaded))
 | 
			
		||||
                    return
 | 
			
		||||
                        postprocessors = [merger]
 | 
			
		||||
                    for f in info_dict['requested_formats']:
 | 
			
		||||
                        new_info = dict(info_dict)
 | 
			
		||||
                        new_info.update(f)
 | 
			
		||||
                        fname = self.prepare_filename(new_info)
 | 
			
		||||
                        fname = prepend_extension(fname, 'f%s' % f['format_id'])
 | 
			
		||||
                        downloaded.append(fname)
 | 
			
		||||
                        partial_success = dl(fname, new_info)
 | 
			
		||||
                        success = success and partial_success
 | 
			
		||||
                    info_dict['__postprocessors'] = postprocessors
 | 
			
		||||
                    info_dict['__files_to_merge'] = downloaded
 | 
			
		||||
                else:
 | 
			
		||||
                    # Just a single file
 | 
			
		||||
                    success = dl(filename, info_dict)
 | 
			
		||||
            except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
 | 
			
		||||
                self.report_error('unable to download video data: %s' % str(err))
 | 
			
		||||
                return
 | 
			
		||||
            except (OSError, IOError) as err:
 | 
			
		||||
                raise UnavailableVideoError(err)
 | 
			
		||||
            except (ContentTooShortError, ) as err:
 | 
			
		||||
                self.report_error('content too short (expected %s bytes and served %s)' % (err.expected, err.downloaded))
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            if success:
 | 
			
		||||
                # Fixup content
 | 
			
		||||
 
 | 
			
		||||
@@ -284,8 +284,19 @@ class FileDownloader(object):
 | 
			
		||||
        """Download to a filename using the info from info_dict
 | 
			
		||||
        Return True on success and False otherwise
 | 
			
		||||
        """
 | 
			
		||||
        nooverwrites_and_exists = (
 | 
			
		||||
            self.params.get('nooverwrites', False)
 | 
			
		||||
            and os.path.exists(encodeFilename(filename))
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        continuedl_and_exists = (
 | 
			
		||||
            self.params.get('continuedl', False)
 | 
			
		||||
            and os.path.isfile(encodeFilename(filename))
 | 
			
		||||
            and not self.params.get('nopart', False)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Check file already present
 | 
			
		||||
        if filename != '-' and self.params.get('continuedl', False) and os.path.isfile(encodeFilename(filename)) and not self.params.get('nopart', False):
 | 
			
		||||
        if filename != '-' and nooverwrites_and_exists or continuedl_and_exists:
 | 
			
		||||
            self.report_file_already_downloaded(filename)
 | 
			
		||||
            self._hook_progress({
 | 
			
		||||
                'filename': filename,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user