fixed duplicate spot, always make clean ending
[spider.git] / perl / DXDupe.pm
index 3dd245b2122497dd7c3986088933cd8f0ea41e41..9198aee6c050939b2d5852f81d089683938835da 100644 (file)
@@ -21,7 +21,9 @@ $fn = "$main::data/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
@@ -29,17 +31,34 @@ sub finish
        undef $dbm;
        untie %d;
        undef %d;
+       unlink $fn;
+}
+
+sub active
+{
+       return $dbm;
 }
 
 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;
@@ -50,9 +69,11 @@ sub process
 {
        # once an hour
        if ($main::systime - $lasttime >=  3600) {
+               my @del;
                while (($k, $v) = each %d) {
-                       delete $d{$k} if $main::systime >= $v;
+                       push @del, $k  if $main::systime >= $v;
                }
+               delete $d{$_} for @del;
                $lasttime = $main::systime;
        }
 }
@@ -79,7 +100,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;
 }