mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00: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
	 Philipp Hagemeister
					Philipp Hagemeister