Fixed ambiguity of multiple video option specifiers by dissalowing it; changed some...
authordannycolligan <devnull@localhost>
Tue, 28 Apr 2009 19:35:25 +0000 (12:35 -0700)
committerRicardo Garcia <sarbalap+freshmeat@gmail.com>
Sun, 31 Oct 2010 10:24:12 +0000 (11:24 +0100)
youtube-dl

index d3acd9d0a86205776b8bc2bf9cce87ca8c32718e..8143de35e90fa2f92b4e163fec4523ccbcec0a65 100755 (executable)
@@ -1015,13 +1015,13 @@ if __name__ == '__main__':
 
                video_format = optparse.OptionGroup(parser, 'Video Format Options')
                video_format.add_option('-f', '--format',
-                               dest='format', metavar='FMT', help='video format code')
+                               action='append', dest='format', metavar='FMT', help='video format code')
                video_format.add_option('-b', '--best-quality',
-                               action='store_const', dest='format', help='download the best quality video possible', const='0')
+                               action='append_const', dest='format', help='download the best quality video possible', const='0')
                video_format.add_option('-m', '--mobile-version',
-                               action='store_const', dest='format', help='alias for -f 17', const='17')
+                               action='append_const', dest='format', help='alias for -f 17', const='17')
                video_format.add_option('-d', '--high-def',
-                               action='store_const', dest='format', help='alias for -f 22', const='22')
+                               action='append_const', dest='format', help='alias for -f 22', const='22')
                parser.add_option_group(video_format)
 
                verbosity = optparse.OptionGroup(parser, 'Verbosity / Simulation Options')
@@ -1063,22 +1063,24 @@ if __name__ == '__main__':
 
                # Conflicting, missing and erroneous options
                if len(all_urls) < 1:
-                       sys.exit(u'ERROR: you must provide at least one URL')
+                       parser.error(u'you must provide at least one URL')
                if opts.usenetrc and (opts.username is not None or opts.password is not None):
-                       sys.exit(u'ERROR: using .netrc conflicts with giving username/password')
+                       parser.error(u'using .netrc conflicts with giving username/password')
                if opts.password is not None and opts.username is None:
-                       sys.exit(u'ERROR: account username missing')
+                       parser.error(u'account username missing')
                if opts.outtmpl is not None and (opts.useliteral or opts.usetitle):
-                       sys.exit(u'ERROR: using output template conflicts with using title or literal title')
+                       parser.error(u'using output template conflicts with using title or literal title')
                if opts.usetitle and opts.useliteral:
-                       sys.exit(u'ERROR: using title conflicts with using literal title')
+                       parser.error(u'using title conflicts with using literal title')
                if opts.username is not None and opts.password is None:
                        opts.password = getpass.getpass(u'Type account password and press return:')
                if opts.ratelimit is not None:
                        numeric_limit = FileDownloader.parse_bytes(opts.ratelimit)
                        if numeric_limit is None:
-                               sys.exit(u'ERROR: invalid rate limit specified')
+                               parser.error(u'invalid rate limit specified')
                        opts.ratelimit = numeric_limit
+               if len(opts.format) > 1:
+                       parser.error(u'pass at most one of the video format option flags (-f, -b, -m, -d)')
 
                # Information extractors
                youtube_ie = YoutubeIE()
@@ -1095,7 +1097,7 @@ if __name__ == '__main__':
                        'forceurl': opts.geturl,
                        'forcetitle': opts.gettitle,
                        'simulate': (opts.simulate or opts.geturl or opts.gettitle),
-                       'format': opts.format,
+                       'format': opts.format[0],
                        'outtmpl': ((opts.outtmpl is not None and opts.outtmpl.decode(locale.getpreferredencoding()))
                                or (opts.usetitle and u'%(stitle)s-%(id)s.%(ext)s')
                                or (opts.useliteral and u'%(title)s-%(id)s.%(ext)s')