X-Git-Url: http://gitweb.michael.orlitzky.com/?p=dead%2Fwhatever-dl.git;a=blobdiff_plain;f=src%2Furi_utilities.rb;h=78966e81cc7b00c30ecb51720dd52dba17335ba4;hp=df09619fce99cf8adaaaaed4f3322eb9cba8a151;hb=1ac1c27f807065c61640d325d86578cc825aab2b;hpb=83e06f83d8274cb32a406739839d56e759664b09 diff --git a/src/uri_utilities.rb b/src/uri_utilities.rb index df09619..78966e8 100644 --- a/src/uri_utilities.rb +++ b/src/uri_utilities.rb @@ -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 . # 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