From fbcdedf51cf4257336c8f6d52d2bf88484756014 Mon Sep 17 00:00:00 2001 From: brimston3 Date: Thu, 29 Aug 2013 15:33:37 -0400 Subject: [PATCH] After reverting filesize xattr from master, re-add changes as feature branch. --- youtube_dl/FileDownloader.py | 14 ++++++++++++-- youtube_dl/__init__.py | 13 +++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index 7c5ac4bc2..cb3453e3f 100644 --- a/youtube_dl/FileDownloader.py +++ b/youtube_dl/FileDownloader.py @@ -11,6 +11,10 @@ if os.name == 'nt': from .utils import * +try: + import xattr +except ImportError: + pass class FileDownloader(object): """File Downloader class. @@ -39,6 +43,7 @@ class FileDownloader(object): 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 + setxattrfilesize: Set ytdl.filesize user xattribute with expected size. """ params = None @@ -509,11 +514,16 @@ class FileDownloader(object): try: (stream, tmpfilename) = sanitize_open(tmpfilename, open_mode) assert stream is not None - filename = self.undo_temp_name(tmpfilename) - self.report_destination(filename) except (OSError, IOError) as err: self.report_error(u'unable to open for writing: %s' % str(err)) return False + if self.params.get('setxattrfilesize', False) and data_len is not None: + try: + xattr.setxattr(tmpfilename, 'user.ytdl.filesize', str(data_len)) + except(OSError, IOError) as err: + self.report_error(u'unable to set filesize xattr: %s' % str(err)) + filename = self.undo_temp_name(tmpfilename) + self.report_destination(filename) try: stream.write(data_block) except (IOError, OSError) as err: diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 431460c57..aef2fe686 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -45,6 +45,11 @@ import sys import warnings import platform +try: + import xattr + xattr_available = True +except ImportError: + xattr_available = False from .utils import * from .update import update_self @@ -324,6 +329,10 @@ def parseOpts(overrideArguments=None): filesystem.add_option('--write-thumbnail', action='store_true', dest='writethumbnail', help='write thumbnail image to disk', default=False) + filesystem.add_option('-X','--xattr-filesize', + action='store_true', dest='setxattrfilesize', + help='set ytdl.filesize file xattr with expected filesize', + default=False) postproc.add_option('-x', '--extract-audio', action='store_true', dest='extractaudio', default=False, @@ -533,6 +542,9 @@ def _real_main(argv=None): date = DateRange.day(opts.date) else: date = DateRange(opts.dateafter, opts.datebefore) + if opts.setxattrfilesize: + if not xattr_available: + parser.error(u'setting filesize xattr requested but python xattr is not available') if sys.version_info < (3,): # In Python 2, sys.argv is a bytestring (also note http://bugs.python.org/issue2128 for Windows systems) @@ -604,6 +616,7 @@ def _real_main(argv=None): 'min_filesize': opts.min_filesize, 'max_filesize': opts.max_filesize, 'daterange': date, + 'setxattrfilesize': opts.setxattrfilesize, }) if opts.verbose: