ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLcache.pm
(Generate patch)

Comparing COMP/SCRAM/src/URL/URLcache.pm (file contents):
Revision 1.1 by williamc, Mon Oct 25 06:35:32 1999 UTC vs.
Revision 1.3 by williamc, Tue Nov 9 15:57:58 1999 UTC

# Line 5 | Line 5
5   #
6   # Description
7   # -----------
8 < # Simple url->file lookup
8 > # Simple url->file lookup (persistent)
9   #
10   # Interface
11   # ---------
12 < # new(cachedir)         : A new URLcache object
12 > # new(cachedir)         : A new URLcache object in a given directory
13   # store(url,file)       : store a url/file combination
14 < # file(url)             : retunr the file for a given url or "" if not there
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;
# Line 27 | Line 30 | sub new {
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->{cachedir}=shift;
58 >        $self->{cachetop}=shift;
59 >        $self->{cachedir}=$self->{cachetop}."/files";
60 >        AddDir::adddir($self->{cachedir});
61  
62 <        $self->{cacheindex}=$self->{cachedir}."/index.db";
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;
82 <        ($found)=$self->{urlDB}->getdata($url);
50 <        return ( ($found eq "")?"":$found);
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   }
# Line 65 | Line 98 | sub store {
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 <        unlink $self->{cacheindex};
120 >        foreach $item ( $self->{urlDB}->match() ) {
121 >          $self->delete($item->keys());
122 >        }
123   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines