]> code.delx.au - youtube-cgi/commitdiff
better command line downloader
authorJames Bunton <jamesbunton@delx.net.au>
Sat, 29 Sep 2012 00:14:58 +0000 (10:14 +1000)
committerJames Bunton <jamesbunton@delx.net.au>
Sat, 29 Sep 2012 00:14:58 +0000 (10:14 +1000)
youtube.cgi

index 409b025838ea87b59fa018774a2cd9a4f8655b7b..283e69233b5efc4860482bdaa9f39a4720a6fed4 100755 (executable)
@@ -224,6 +224,15 @@ def copy_with_progress(total_size, infile, outfile):
                        size /= 1024
                return "%.2f %s" % (size, suffix)
 
+       def print_status():
+               sys.stdout.write("\33[2K\r")
+               sys.stdout.write("%s / %s (%s/sec)" % (
+                       pp_size(bytes_read),
+                       pp_size(total_size),
+                       pp_size(bytes_read / (now - start_ts)),
+               ))
+               sys.stdout.flush()
+
        start_ts = time.time()
        last_ts = 0
        bytes_read = 0
@@ -231,13 +240,7 @@ def copy_with_progress(total_size, infile, outfile):
                now = time.time()
                if now - last_ts > 0.5:
                        last_ts = now
-                       sys.stdout.write("\33[2K\r")
-                       sys.stdout.write("%s / %s (%s/sec)" % (
-                               pp_size(bytes_read),
-                               pp_size(total_size),
-                               pp_size(bytes_read / (now - start_ts)),
-                       ))
-                       sys.stdout.flush()
+                       print_status()
 
                buf = infile.read(32768)
                if not buf:
@@ -246,6 +249,7 @@ def copy_with_progress(total_size, infile, outfile):
                bytes_read += len(buf)
 
        # Newline at the end
+       print_status()
        print
 
 def main():
@@ -257,6 +261,9 @@ def main():
        doc = parse_url(url)
        video_url, filename = get_video_url(doc)
        video_data = urlopen(video_url)
+       if os.path.isfile(filename):
+               print >>sys.stderr, "Error! File exists:", filename
+               sys.exit(1)
        outfile = open(filename, "w")
        total_size = int(video_data.info().getheader("Content-Length"))
        print "Downloading", filename.encode("utf-8")