ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLcache.pm
Revision: 1.3
Committed: Tue Nov 9 15:57:58 1999 UTC (25 years, 6 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.2: +21 -0 lines
Log Message:
Added updatenumber for change tracking

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 # updatenumber(int) : return an integer number changed with each store
20
21 package URL::URLcache;
22 require 5.004;
23 use Utilities::HashDB;
24
25 sub new {
26 my $class=shift;
27 $self={};
28 bless $self, $class;
29 $self->init(@_);
30 return $self;
31 }
32
33 sub filestore {
34 my $self=shift;
35 return $self->{cachedir};
36 }
37
38 sub filename {
39 my $self=shift;
40 my $url=shift;
41
42 my $filenumber;
43
44 my $file=$self->file($url);
45 if ( $file eq "" ) {
46 # need to generate a new filename - a random number will do
47 srand();
48 do {
49 $filenumber=int(rand 9999999)+1;
50 $file=$self->filestore()."/".$filenumber;
51 } until ( ! ( -e $file ) );
52 }
53 return $file;
54 }
55
56 sub init {
57 my $self=shift;
58 $self->{cachetop}=shift;
59 $self->{cachedir}=$self->{cachetop}."/files";
60 AddDir::adddir($self->{cachedir});
61
62 $self->{cacheindex}=$self->{cachetop}."/index.db";
63 $self->{cacheseqindex}=$self->{cachetop}."/seqnumb.db";
64 $self->{urlDB}=Utilities::HashDB->new();
65 $self->{urlDBupdate}=Utilities::HashDB->new();
66 if ( -f $self->{cacheindex} ) {
67 $self->{urlDB}->restore($self->{cacheindex});
68 }
69 else {
70 AddDir::adddir($self->{cachedir});
71 }
72 if ( -f $self->{cacheseqindex} ) {
73 $self->{urlDBupdate}->restore($self->{cacheseqindex});
74 }
75 }
76
77 sub file {
78 my $self=shift;
79 my $url=shift;
80
81 my @found=$self->{urlDB}->getdata($url);
82 return ( ($#found == -1)?"":$found[0]);
83 }
84
85 sub delete {
86 my $self=shift;
87 my $url=shift;
88 unlink ($self->{urlDB}->getdata($URL));
89 $self->{urlDB}->deletedata($url);
90 $self->{urlDB}->store($self->{cacheindex});
91 }
92
93 sub store {
94 my $self=shift;
95 my $url=shift;
96 my $file=shift;
97
98 $self->{urlDB}->deletedata($url);
99 $self->{urlDB}->setdata($file,$url);
100 $self->{urlDB}->store($self->{cacheindex});
101
102 # Keep a track of changes
103 my ($sequencenumber)=$self->{urlDBupdate}->getdata($url);
104 if ( ! defined $sequencenumber ) { $sequencenumber=0 };
105 $sequencenumber=$sequencenumber+1;
106 $self->{urlDBupdate}->deletedata($url);
107 $self->{urlDBupdate}->setdata($sequencenumber,$url);
108 $self->{urlDBupdate}->store($self->{cacheseqindex});
109 }
110
111 sub updatenumber {
112 my $self=shift;
113 my $url=shift;
114
115 return $self->{urlDBupdate}->getdata($url);
116 }
117
118 sub clear {
119 my $self=shift;
120 foreach $item ( $self->{urlDB}->match() ) {
121 $self->delete($item->keys());
122 }
123 }