# for trouble.
class UriUtilities
- # Get the filename portion of a given URI.
- # Return nil if there is no filename portion.
- def get_filename(uri)
- return uri.path.split('/').last
+ 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
- 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|
+ File.open(outfile_name, 'wb') do |outfile|
+ # 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.
raise(e)
end
end
-
+
end