ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLcache.pm
Revision: 1.2
Committed: Thu Nov 4 10:08:11 1999 UTC (25 years, 6 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.1: +38 -9 lines
Log Message:
New interface and file store

File Contents

# Content
1 #
2 # URLcache.pm
3 #
4 # Originally Written by Christopher Williams
5 #
6 # Description
7 # -----------
8 # Simple url->file lookup (persistent)
9 #
10 # Interface
11 # ---------
12 # new(cachedir) : A new URLcache object in a given directory
13 # store(url,file) : store a url/file combination
14 # file(url) : return the file for a given url
15 # delete(url) : remove from cache url
16 # clear() : clear cache
17 # filestore() : Return the directory to download files to
18 # filename(url) : return a unique file/dir in cache for the given url
19
20 package URL::URLcache;
21 require 5.004;
22 use Utilities::HashDB;
23
24 sub new {
25 my $class=shift;
26 $self={};
27 bless $self, $class;
28 $self->init(@_);
29 return $self;
30 }
31
32 sub filestore {
33 my $self=shift;
34 return $self->{cachedir};
35 }
36
37 sub filename {
38 my $self=shift;
39 my $url=shift;
40
41 my $filenumber;
42
43 my $file=$self->file($url);
44 if ( $file eq "" ) {
45 # need to generate a new filename - a random number will do
46 srand();
47 do {
48 $filenumber=int(rand 9999999)+1;
49 $file=$self->filestore()."/".$filenumber;
50 } until ( ! ( -e $file ) );
51 }
52 return $file;
53 }
54
55 sub init {
56 my $self=shift;
57 $self->{cachetop}=shift;
58 $self->{cachedir}=$self->{cachetop}."/files";
59 AddDir::adddir($self->{cachedir});
60
61 $self->{cacheindex}=$self->{cachetop}."/index.db";
62 $self->{urlDB}=Utilities::HashDB->new();
63 if ( -f $self->{cacheindex} ) {
64 $self->{urlDB}->restore($self->{cacheindex});
65 }
66 else {
67 AddDir::adddir($self->{cachedir});
68 }
69 }
70
71 sub file {
72 my $self=shift;
73 my $url=shift;
74
75 my @found=$self->{urlDB}->getdata($url);
76 return ( ($#found == -1)?"":$found[0]);
77 }
78
79 sub delete {
80 my $self=shift;
81 my $url=shift;
82 unlink ($self->{urlDB}->getdata($URL));
83 $self->{urlDB}->deletedata($url);
84 $self->{urlDB}->store($self->{cacheindex});
85 }
86
87 sub store {
88 my $self=shift;
89 my $url=shift;
90 my $file=shift;
91
92 $self->{urlDB}->deletedata($url);
93 $self->{urlDB}->setdata($file,$url);
94 $self->{urlDB}->store($self->{cacheindex});
95 }
96
97 sub clear {
98 my $self=shift;
99 foreach $item ( $self->{urlDB}->match() ) {
100 $self->delete($item->keys());
101 }
102 }