]> gitweb.michael.orlitzky.com - dead/whatever-dl.git/blobdiff - src/uri_utilities.rb
Clean up the code for UriUtilities.
[dead/whatever-dl.git] / src / uri_utilities.rb
index df09619fce99cf8adaaaaed4f3322eb9cba8a151..78966e81cc7b00c30ecb51720dd52dba17335ba4 100644 (file)
@@ -25,27 +25,45 @@ require 'vendor/ruby-progressbar/progressbar'
 # for trouble.
 class UriUtilities
 
+  def initialize()
+    @pbar = nil
+  end
+
+  def content_length_callback(content_length)
+    if content_length && (0 < content_length)
+      @pbar = ProgressBar.new("Download", content_length)
+      @pbar.instance_eval { @bar_mark = '=' }
+      @pbar.file_transfer_mode
+    end
+  end
+
+  def progress_callback(size)
+    @pbar.set(size) if @pbar
+  end
+
+
   # Download the given URI object to <outfile_name>.
   # Should use the progress_proc parameter to show
   # a progress bar using the Ruby/ProgressBar library.
-  def download_with_progress_bar(uri, outfile_name)
+  def download_with_progress_bar(uri, outfile_name, headers = {})
     # We wrap the whole thing in a begin/rescue so that
     # we can clean up afterwards in case of an error.
     begin
       File.open(outfile_name, 'wb') do |outfile|
-        pbar = nil
-        uri.open(:content_length_proc => lambda {|content_length|
-                   if content_length && (0 < content_length)                   
-                     pbar = ProgressBar.new("Download", content_length)
-                     pbar.instance_eval { @bar_mark = '=' }
-                     pbar.file_transfer_mode
-                   end
-                 },
-                 :progress_proc => lambda {|size|
-                   pbar.set(size) if pbar
-                 }) do |video_file|
+        # Convert our methods to Proc objects.
+        content_length_callback = method(:content_length_callback)
+        progress_callback = method(:progress_callback)
+
+        # So that they can be passed as arguments to open().
+        open_params = { :content_length_proc => content_length_callback,
+                        :progress_proc => progress_callback}
+
+        # Add the headers as additional parameters to the open() call.
+        open_params.merge!(headers)
+
+        uri.open(open_params) do |video_file|
           outfile.write(video_file.read)
-        end      
+        end
       end
 
       # Toss out an empty line to get rid of the progress bar.
@@ -63,5 +81,5 @@ class UriUtilities
       raise(e)
     end
   end
-  
+
 end