use DXLog;
use Julian;
use Prefix;
+use DXDupe;
use strict;
-use vars qw($fp $maxspots $defaultspots $maxdays $dirprefix %dup $duplth $dupage);
+use vars qw($fp $maxspots $defaultspots $maxdays $dirprefix $duplth $dupage);
$fp = undef;
$maxspots = 50; # maximum spots to return
$defaultspots = 10; # normal number of spots to return
$maxdays = 35; # normal maximum no of days to go back
$dirprefix = "spots";
-%dup = (); # the spot duplicates hash
$duplth = 20; # the length of text to use in the deduping
$dupage = 3*3600; # the length of time to hold spot dups
# format a spot for user output in 'broadcast' mode
sub formatb
{
- my @dx = @_;
- my $t = ztime($dx[2]);
- my $ref = DXUser->get_current($dx[4]);
- my $loc = $ref->qra if $ref && $ref->qra;
+ my $wantgrid = shift;
+ my $t = ztime($_[2]);
+ my $ref = DXUser->get_current($_[4]);
+ my $loc = $ref->qra if $ref && $ref->qra && $wantgrid;
$loc = ' ' . substr($ref->qra, 0, 4) if $loc;
$loc = "" unless $loc;
- return sprintf "DX de %-7.7s%11.1f %-12.12s %-30s %s$loc", "$dx[4]:", $dx[0], $dx[1], $dx[3], $t ;
+ return sprintf "DX de %-7.7s%11.1f %-12.12s %-30s %s$loc", "$_[4]:", $_[0], $_[1], $_[3], $t ;
}
# format a spot for user output in list mode
sub formatl
{
- my @dx = @_;
- my $t = ztime($dx[2]);
- my $d = cldate($dx[2]);
- return sprintf "%8.1f %-11s %s %s %-28.28s%7s>", $dx[0], $dx[1], $d, $t, $dx[3], "<$dx[4]" ;
+ my $t = ztime($_[2]);
+ my $d = cldate($_[2]);
+ return sprintf "%8.1f %-11s %s %s %-28.28s%7s>", $_[0], $_[1], $d, $t, $_[3], "<$_[4]" ;
}
#
chomp $text;
$text = substr($text, 0, $duplth) if length $text > $duplth;
unpad($text);
- my $dupkey = "$freq|$call|$d|$text";
- return 1 if exists $dup{$dupkey};
- $dup{$dupkey} = $d * 60; # in seconds (to the nearest minute)
- return 0;
-}
-
-# called every hour and cleans out the dup cache
-sub process
-{
- my $cutoff = $main::systime - $dupage;
- while (my ($key, $val) = each %dup) {
- delete $dup{$key} if $val < $cutoff;
- }
+ $text =~ s/[^a-zA-Z0-9]//g;
+ my $dupkey = "X$freq|$call|$d|\L$text";
+ return DXDupe::check($dupkey, $main::systime+$dupage);
}
sub listdups
{
- my @out;
- for (sort { $dup{$a} <=> $dup{$b} } keys %dup) {
- my $val = $dup{$_};
- push @out, "$_ = $val (" . cldatetime($val) . ")";
- }
- return @out;
+ return DXDupe::listdups('X', $dupage, @_);
}
1;