I don't know anything about File-Fetch, but if you want to show progress, your module will need a callback that hooks into the actual download of bytes. LWP has such a callback, so I will show it to you so you understand. See if File-Fetch has something similar (a callback for the download)
#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;
# don't buffer the prints to make the status update
$| = 1;
my $ua = LWP::UserAgent->new();
my $received_size = 0;
my $url = 'http://www.cpan.org/authors/id/J/JG/JGOFF/parrot-0_0_7.tgz'
+;
print "Fetching $url\n";
my $request_time = time;
my $last_update = 0;
my $response = $ua->get($url,
':content_cb' => \&callback,
':read_size_hint' => 8192,
);
print "\n";
sub callback {
my ($data, $response, $protocol) = @_;
my $total_size = $response->header('Content-Length') || 0;
$received_size += length $data;
# write the $data to a filehandle or whatever should happen
# with it here.
my $time_now = time;
# this to make the status only update once per second.
return unless $time_now > $last_update or $received_size == $total_s
+ize;
$last_update = $time_now;
print "\rReceived $received_size bytes";
printf " (%i%%)", (100/$total_size)*$received_size if $total_size;
printf " %6.1f/bps", $received_size/(($time_now-$request_time)||1)
if $received_size;
}
| [reply] [d/l] |