2 |
|
# Interface |
3 |
|
# --------- |
4 |
|
# new(cache) : A new urlhandler with a defined default cahce directory |
5 |
+ |
# download(url,[location]) : as get but always download |
6 |
|
# get(url,[location]) : download from the specified url to cache or location |
7 |
|
# return the full url path name incl. any base expansion |
8 |
|
# and the filename downloaded to |
40 |
|
use URL::URL_cvs; |
41 |
|
use URL::URL_cvsfile; |
42 |
|
use URL::URL_file; |
43 |
+ |
use URL::URL_test; |
44 |
|
use URL::URL_filed; |
45 |
|
$self->{urlmodules}={ |
46 |
|
'cvsfile' => 'URL::URL_cvsfile', |
47 |
|
'cvs' => 'URL::URL_cvs', |
48 |
|
'file' => 'URL::URL_file', |
49 |
< |
'filed' => 'URL::URL_filed' |
49 |
> |
'filed' => 'URL::URL_filed', |
50 |
> |
'test' => 'URL::URL_test' |
51 |
|
}; |
52 |
|
} |
53 |
|
|
54 |
|
sub get { |
55 |
|
my $self=shift; |
56 |
|
my $origurl=shift; |
57 |
+ |
my $file=""; |
58 |
|
|
59 |
< |
# Process the URL string |
60 |
< |
$url=URL::URLclass->new($origurl); |
59 |
> |
my $url=URL::URLclass->new($origurl); |
60 |
> |
my $type=$url->type(); |
61 |
> |
$url->expandurl($self->currentbase($type)); |
62 |
> |
my $fullurl=$url->url(); |
63 |
> |
|
64 |
> |
$file=$self->{cache}->file($fullurl); |
65 |
> |
if ( $file eq "" ) { |
66 |
> |
($fullurl,$file)=$self->download($origurl, @_); |
67 |
> |
} |
68 |
> |
return ($fullurl, $file); |
69 |
> |
} |
70 |
> |
|
71 |
> |
sub download { |
72 |
> |
my $self=shift; |
73 |
> |
my $origurl=shift; |
74 |
> |
|
75 |
> |
# Process the URL string |
76 |
> |
my $url=URL::URLclass->new($origurl); |
77 |
|
my $type=$url->type(); |
78 |
|
$urltypehandler=$self->_typehandler($type); |
79 |
|
$url->expandurl($self->currentbase($type)); |
80 |
|
|
81 |
|
# Generate a location name if not provided |
82 |
+ |
$nocache=1; |
83 |
|
if ( @_ ) { |
84 |
|
$location=shift; |
85 |
+ |
$nocache=0; # dont cache if downloaded to an external location |
86 |
|
} |
87 |
|
else { |
88 |
|
$location=$self->{cache}->filename($url->url()); |
89 |
|
} |
90 |
< |
# -- get the file form the appropriate handler |
90 |
> |
# -- get the file from the appropriate handler |
91 |
|
if ( defined $urltypehandler ) { |
92 |
|
# Call the download module |
93 |
|
$file=eval{$urltypehandler->get($url, $location)}; |
94 |
|
} |
95 |
|
|
96 |
|
# now register it in the cache if successful |
97 |
< |
if ( $file ) { |
98 |
< |
$self->{cache}->store($url->url(), $file); |
97 |
> |
if ( $file && $nocache) { |
98 |
> |
$self->{cache}->store($url->url(), $location); |
99 |
|
} |
100 |
|
return ($url->url(), $file); |
101 |
|
} |