add an RBN line to progress
[spider.git] / perl / DXDupe.pm
index cd4272c787530d24473dc821fcd7b724596762c9..613a2aec677794ba1cd6fe145ea90c3901b61dac 100644 (file)
@@ -9,36 +9,55 @@
 
 package DXDupe;
 
+use strict;
+
 use DXDebug;
 use DXUtil;
 use DXVars;
+use DB_File;
 
 use vars qw{$lasttime $dbm %d $default $fn};
 
 $default = 48*24*60*60;
 $lasttime = 0;
-$fn = "$main::data/dupefile";
+localdata_mv("dupefile");
+$fn = localdata("dupefile");
 
 sub init
 {
-       $dbm = tie (%d, 'DB_File', $fn) or confess "can't open dupe file: $fn ($!)";
+       unlink $fn;
+       $dbm = tie (%d, 'DB_File', $fn);
+       confess "cannot open $fn $!" unless $dbm;
 }
 
 sub finish
 {
        undef $dbm;
        untie %d;
+       undef %d;
+       unlink $fn;
 }
 
 sub check
 {
-       my ($s, $t) = @_;
-       return 1 if exists $d{$s};
-       $t = $main::systime + $default unless $t;
-       $d{$s} = $t;
+       my $s = shift;
+       return 1 if find($s);
+       add($s, shift);
        return 0;
 }
 
+sub find
+{
+       return $d{$_[0]};
+}
+
+sub add
+{
+       my $s = shift;
+       my $t = shift || $main::systime + $default;
+       $d{$s} = $t;
+}
+
 sub del
 {
        my $s = shift;
@@ -49,9 +68,11 @@ sub process
 {
        # once an hour
        if ($main::systime - $lasttime >=  3600) {
-               while (($k, $v) = each %d) {
-                       delete $d{$k} if $main::systime >= $v;
+               my @del;
+               while (my ($k, $v) = each %d) {
+                       push @del, $k  if $main::systime >= $v;
                }
+               delete $d{$_} for @del;
                $lasttime = $main::systime;
        }
 }
@@ -60,7 +81,7 @@ sub get
 {
        my $start = shift;
        my @out;
-       while (($k, $v) = each %d) {
+       while (my ($k, $v) = each %d) {
                push @out, $k, $v if !$start || $k =~ /^$start/; 
        }
        return @out;
@@ -78,7 +99,7 @@ sub listdups
        my @out;
        for (sort { $d{$a} <=> $d{$b} } grep { m{$regex}i } keys %d) {
                my ($dum, $key) = unpack "a1a*", $_;
-               push @out, "$key = " . cldatetime($d{$_} - $dupage);
+               push @out, "$key = " . cldatetime($d{$_} - $dupage) . " expires " . cldatetime($d{$_});
        }
        return @out;
 }