mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 07:47:08 -05:00 
			
		
		
		
	Add --xattr-set-filesize option (Fixes #1348)
This commit is contained in:
		@@ -231,7 +231,8 @@ class YoutubeDL(object):
 | 
			
		||||
    The following parameters are not used by YoutubeDL itself, they are used by
 | 
			
		||||
    the FileDownloader:
 | 
			
		||||
    nopart, updatetime, buffersize, ratelimit, min_filesize, max_filesize, test,
 | 
			
		||||
    noresizebuffer, retries, continuedl, noprogress, consoletitle
 | 
			
		||||
    noresizebuffer, retries, continuedl, noprogress, consoletitle,
 | 
			
		||||
    xattr_set_filesize.
 | 
			
		||||
 | 
			
		||||
    The following options are used by the post processors:
 | 
			
		||||
    prefer_ffmpeg:     If True, use ffmpeg instead of avconv if both are available,
 | 
			
		||||
 
 | 
			
		||||
@@ -241,6 +241,11 @@ def _real_main(argv=None):
 | 
			
		||||
            'verboseOutput': opts.verbose,
 | 
			
		||||
            'exec_cmd': opts.exec_cmd,
 | 
			
		||||
        })
 | 
			
		||||
    if opts.xattr_set_filesize:
 | 
			
		||||
        try:
 | 
			
		||||
            import xattr
 | 
			
		||||
        except ImportError:
 | 
			
		||||
            parser.error('setting filesize xattr requested but python-xattr is not available')
 | 
			
		||||
 | 
			
		||||
    ydl_opts = {
 | 
			
		||||
        'usenetrc': opts.usenetrc,
 | 
			
		||||
@@ -337,6 +342,7 @@ def _real_main(argv=None):
 | 
			
		||||
        'external_downloader': opts.external_downloader,
 | 
			
		||||
        'list_thumbnails': opts.list_thumbnails,
 | 
			
		||||
        'playlist_items': opts.playlist_items,
 | 
			
		||||
        'xattr_set_filesize': opts.xattr_set_filesize,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    with YoutubeDL(ydl_opts) as ydl:
 | 
			
		||||
 
 | 
			
		||||
@@ -25,21 +25,23 @@ class FileDownloader(object):
 | 
			
		||||
 | 
			
		||||
    Available options:
 | 
			
		||||
 | 
			
		||||
    verbose:           Print additional info to stdout.
 | 
			
		||||
    quiet:             Do not print messages to stdout.
 | 
			
		||||
    ratelimit:         Download speed limit, in bytes/sec.
 | 
			
		||||
    retries:           Number of times to retry for HTTP error 5xx
 | 
			
		||||
    buffersize:        Size of download buffer in bytes.
 | 
			
		||||
    noresizebuffer:    Do not automatically resize the download buffer.
 | 
			
		||||
    continuedl:        Try to continue downloads if possible.
 | 
			
		||||
    noprogress:        Do not print the progress bar.
 | 
			
		||||
    logtostderr:       Log messages to stderr instead of stdout.
 | 
			
		||||
    consoletitle:      Display progress in console window's titlebar.
 | 
			
		||||
    nopart:            Do not use temporary .part files.
 | 
			
		||||
    updatetime:        Use the Last-modified header to set output file timestamps.
 | 
			
		||||
    test:              Download only first bytes to test the downloader.
 | 
			
		||||
    min_filesize:      Skip files smaller than this size
 | 
			
		||||
    max_filesize:      Skip files larger than this size
 | 
			
		||||
    verbose:            Print additional info to stdout.
 | 
			
		||||
    quiet:              Do not print messages to stdout.
 | 
			
		||||
    ratelimit:          Download speed limit, in bytes/sec.
 | 
			
		||||
    retries:            Number of times to retry for HTTP error 5xx
 | 
			
		||||
    buffersize:         Size of download buffer in bytes.
 | 
			
		||||
    noresizebuffer:     Do not automatically resize the download buffer.
 | 
			
		||||
    continuedl:         Try to continue downloads if possible.
 | 
			
		||||
    noprogress:         Do not print the progress bar.
 | 
			
		||||
    logtostderr:        Log messages to stderr instead of stdout.
 | 
			
		||||
    consoletitle:       Display progress in console window's titlebar.
 | 
			
		||||
    nopart:             Do not use temporary .part files.
 | 
			
		||||
    updatetime:         Use the Last-modified header to set output file timestamps.
 | 
			
		||||
    test:               Download only first bytes to test the downloader.
 | 
			
		||||
    min_filesize:       Skip files smaller than this size
 | 
			
		||||
    max_filesize:       Skip files larger than this size
 | 
			
		||||
    xattr_set_filesize: Set ytdl.filesize user xattribute with expected size.
 | 
			
		||||
                        (experimenatal)
 | 
			
		||||
 | 
			
		||||
    Subclasses of this one must re-define the real_download method.
 | 
			
		||||
    """
 | 
			
		||||
 
 | 
			
		||||
@@ -157,6 +157,14 @@ class HttpFD(FileDownloader):
 | 
			
		||||
                except (OSError, IOError) as err:
 | 
			
		||||
                    self.report_error('unable to open for writing: %s' % str(err))
 | 
			
		||||
                    return False
 | 
			
		||||
 | 
			
		||||
                if self.params.get('xattr_set_filesize', False) and data_len is not None:
 | 
			
		||||
                    try:
 | 
			
		||||
                        import xattr
 | 
			
		||||
                        xattr.setxattr(tmpfilename, 'user.ytdl.filesize', str(data_len))
 | 
			
		||||
                    except(OSError, IOError, ImportError) as err:
 | 
			
		||||
                        self.report_error('unable to set filesize xattr: %s' % str(err))
 | 
			
		||||
 | 
			
		||||
            try:
 | 
			
		||||
                stream.write(data_block)
 | 
			
		||||
            except (IOError, OSError) as err:
 | 
			
		||||
 
 | 
			
		||||
@@ -394,6 +394,10 @@ def parseOpts(overrideArguments=None):
 | 
			
		||||
        '--playlist-reverse',
 | 
			
		||||
        action='store_true',
 | 
			
		||||
        help='Download playlist videos in reverse order')
 | 
			
		||||
    downloader.add_option(
 | 
			
		||||
        '--xattr-set-filesize',
 | 
			
		||||
        dest='xattr_set_filesize', action='store_true',
 | 
			
		||||
        help='(experimental) set file xattribute ytdl.filesize with expected filesize')
 | 
			
		||||
    downloader.add_option(
 | 
			
		||||
        '--external-downloader',
 | 
			
		||||
        dest='external_downloader', metavar='COMMAND',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user